気になった事を自由に書いてます。
      
しばらくお待ちくださいFormを自作したい
しばらくお待ちくださいFormのなかにBackgroundWorkerを持たせてます。
このFormの表示時(Loadイベント)にバックグラウンドで処理を実行します。
処理後はRunWorkerCompletedEventで呼び出し元のメソッドをコールします。

しばらくお待ちくださいForm
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100


using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

namespace Aries.Form
{
    public partial class ArWaitForm : System.Windows.Forms.Form
    {
        private BackgroundWorker _bgw = new BackgroundWorker();
        private DoWorkEventHandler _doWorkEvent = null;
        private RunWorkerCompletedEventHandler _runWorkerCompletedEvent = null;

        #region プロパティ
        /// <summary>
        /// DoWorkEventを設定します。設定できるのは最初の一回だけです。
        /// </summary>
        public DoWorkEventHandler DoWorkEvent
        {
            set
            {
                if (_doWorkEvent == null)
                {
                    _doWorkEvent = value;
                    _bgw.DoWork += new DoWorkEventHandler(value);
                }
            }
        }
        /// <summary>
        /// RunWorkerCompletedEventを設定します。設定できるのは最初の一回だけです。
        /// </summary>
        public RunWorkerCompletedEventHandler RunWorkerCompletedEvent
        {
            set
            {
                if (_runWorkerCompletedEvent == null)
                {
                    _runWorkerCompletedEvent = value;
                    _bgw.RunWorkerCompleted += new RunWorkerCompletedEventHandler(value);
                }
            }
        }
        #endregion
        
        #region イベント
        /// <summary>
        /// Formを表示したときに発生するイベントです。
        /// </summary>
        /// <param name="sender">イベントが発生したオブジェクトです。</param>
        /// <param name="e">イベント データを格納している <see cref="EventArgs"/>。</param>
        /// <remarks>
        /// 本イベントでバックグラウンド処理を動作させます。
        /// </remarks>
        private void ArWaitForm_Load(object sender, EventArgs e)
        {
            try
            {
                if (_doWorkEvent != null && _runWorkerCompletedEvent != null)
                {
                    // バックグラウンド操作の実行を開始します。
                    _bgw.RunWorkerAsync();
                }
                else
                {
                    // 設定していない場合は画面を閉じます。
                    Close();
                }
            }
            catch (System.Exception ex)
            {
                throw ex;
            }
        }
        #endregion

        /// <summary>
        /// コンストラクタです。
        /// </summary>
        public ArWaitForm()
        {
            // 閉じる、最小化、最大化ボタンを表示してません。
            // this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None;
            InitializeComponent();
        }

        #region メソッド
        /// <summary>
        /// 本Formを閉じます。
        /// </summary>
        public void FormClose()
        {
            Close();
        }
        #endregion

    }
}



呼び出し元の画面
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22

ArWaitForm form = new ArWaitForm();

private void button3_Click(object sender, EventArgs e)
{
    form.DoWorkEvent = Work;
    form.RunWorkerCompletedEvent = End;
    form.ShowDialog();
}

private void Work(object sender, DoWorkEventArgs e)
{
    for (int i = 0; i < 10; i++)
    {
        System.Threading.Thread.Sleep(1000);
    }
}

private void End(object sender, RunWorkerCompletedEventArgs e)
{
    MessageBox.Show("END");
    form.FormClose();
}


      






Copyright (C) 2011 - 2015 猫の気ままなC#日記