CodePanic! > C#.NET Tips > 今ここ
■BackgroundWorkerを使って別スレッドで処理する
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("_");
}
}
}
}
}
■結果
@@@@@@@@@@@_@@@@@@@@___@@@@@@@@@@____@@@@@@________@@@@@@@@_____@____@@@@@@@(以後省略)
Copyright © 2008.07 - shougo suzaki
|