2006年05月29日

BackgroundWorker

   このエントリーをはてなブックマークに追加 Clip to Evernote
先日は、

>BackgroundWorker コンポーネントは、System.Threading 名前空間に代わると
>共に追加の機能を提供します。

とMSDN ドキュメントを引用しましたが、

BackgroundWorkerは、名前のとおり、GUIの裏(バックグラウンド)で処理をさせたいときに利用するためのコンポーネントであって、僕が今やろうとしているスレッドプールを利用した多重処理を実現させるには、ちょっと利用するのが難しそうです。

ただ、WindowsFormで、時間のかかる処理を走らせるにはとても手軽に使えて良いですね。プログレスバーの表示のための仕組みも組み込まれています。
BeginInvoke を使う必要もありません。

先日のコードだと、このあたりが分からないので、再度コードをアップします。

  BackgroundWorker backgroundWorker1 = new BackgroundWorker();
backgroundWorker1.DoWork += new DoWorkEventHandler(MyTask);
backgroundWorker1.RunWorkerCompleted += MyTaskCompleted;
backgroundWorker1.ProgressChanged +=
new ProgressChangedEventHandler(MyTaskProgressChanged);
// バックグラウンド処理の起動
backgroundWorker1.WorkerReportsProgress = true;

// プログレスバー表示処理
private void MyTaskProgressChanged(object sender,ProgressChangedEventArgs e) {
this.progressBar1.Value = e.ProgressPercentage;
}

// バックグラウンド処理
void MyTask(object sender, DoWorkEventArgs e) {
BackgroundWorker bw = (BackgroundWorker)sender;
...
for ( ... ) {
...
bw.ReportProgress(percentage);
}
}

// バックグラウンド処理が終了したときに呼び出される
void MyTaskCompleted(object sender, RunWorkerCompletedEventArgs e) {
...
}

※ ReportProgress には、ユーザデータを渡せるメソッドがオーバーロードされていますので、パーセント以外の情報も表示できます。


 

この記事へのトラックバックURL

http://trackback.blogsys.jp/livedoor/gushwell/50480714