BackgroundWorkerを使えば、簡単に別スレッドで処理を実行することができます。
使い方はとても簡単です。
FormにBackgroundWorkerをドラッグ&ドロップで配置し
DoWorkとRunWorkerCompletedのイベントハンドラをそれぞれ追加します。
DoWorkハンドラには
別スレッドで処理したいコードを記述します。
RunWorkerCompletedには
別スレッドでの処理が完了した際のコードを記述します。
例として
FormにButtonとBackgroundWorkerを配置し
ボタンをクリックされたら
Clickイベントハンドラ内で文字をループ表示しつつ
別スレッドでも同様に違い文字をループ表示させてみます。
結果は出力パネルに出力されます。
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; namespace WindowsFormsApplication1 { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { // RunWorkerAsyncが呼び出された時に発生 backgroundWorker1.DoWork += new DoWorkEventHandler(backgroundWorker1_DoWork); // BackgroundWorkerでの処理が完了した時に発生 backgroundWorker1.RunWorkerCompleted += new RunWorkerCompletedEventHandler(backgroundWorker1_RunWorkerCompleted); } void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) { MessageBox.Show("処理完了"); } void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e) { for (int i = 0; i < 100; i++) { //System.Threading.Thread.Sleep(10); System.Diagnostics.Debug.Write("@"); } } private void button1_Click(object sender, EventArgs e) { // BackgroundWorkerが処理中でなければ if (!backgroundWorker1.IsBusy) { // バックグラウンド処理を開始 backgroundWorker1.RunWorkerAsync(); for (int i = 0; i < 100; i++) { //System.Threading.Thread.Sleep(10); System.Diagnostics.Debug.Write("_"); } } } } }
■結果
@@@@@@@@@@@_@@@@@@@@___@@@@@@@@@@____@@@@@@________@@@@@@@@_____@____@@@@@@@(以後省略)
コメントを残す