C#.NETのサンプルコードを掲載しています。
      
BackgroundWorkerを使ったスレッド処理
BackgroundWorkerを使ったサンプルです。

テストコード
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

private void BackgroundWorkerTest()
{
    BackgroundWorker bw = new BackgroundWorker();
    bw.DoWork += new DoWorkEventHandler(DoWork);
    bw.RunWorkerCompleted += new RunWorkerCompletedEventHandler(RunWorkerCompleted);

    // バックグラウンド操作の実行を開始します。
    bw.RunWorkerAsync();
}

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

private void RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
    if (e.Error != null)
    {
        // 非同期操作中にエラーが発生した場合は e.Error に例外を格納しています。
    }
    else if (e.Cancelled)
    {
        // 非同期操作中にキャンセルを行うとここに入ります。
    }

    MessageBox.Show("スレッド処理終了");
}



追記です。
DoWorkで例外が発生した場合、RunWorkerCompletedのe.Errorに例外の内容が入ります。
Microsoft Visual Studio上で動かしているとDoWork内で例外が発生し、
止まってしまいます。これはデバッグの例外の設定で処理を中断するにチェックが
付いているためです。チェックをはずすとRunWorkerCompletedまで処理が進みます。

それと、RunWorkerCompleted内はtry〜catchで例外を処理したほうがよいです。
無ければ別スレッドなのでThreadExceptionEventHandlerでキャッチするかもしれないし
このイベントを登録してない場合は、"アプリケーションのコンポーネントで、
ハンドルされてない例外が発生しました。〜"
となるからです。

      
スレッド(Thread)






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