C#でのBackgroundWorkerの使い方は?
C#でBackgroundWorkerを使用するには、次の手順を実行します。
- BackgroundWorkerクラスを使用するために、System.ComponentModel名前空間をインポートします。
- クラスのメンバー変数としてBackgroundWorkerオブジェクトを作成します。
private BackgroundWorker backgroundWorker1;
- コンストラクタやフォームのロードイベントでBackgroundWorkerオブジェクトを初期化します。
public MyClass()
{
InitializeComponent();
backgroundWorker1 = new BackgroundWorker();
backgroundWorker1.WorkerReportsProgress = true;
backgroundWorker1.DoWork += new DoWorkEventHandler(backgroundWorker1_DoWork);
backgroundWorker1.ProgressChanged += new ProgressChangedEventHandler(backgroundWorker1_ProgressChanged);
backgroundWorker1.RunWorkerCompleted += new RunWorkerCompletedEventHandler(backgroundWorker1_RunWorkerCompleted);
}
- DoWorkイベントハンドラー内に、バックグラウンドタスクを記述する。
private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
// 执行后台任务的代码
for (int i = 0; i <= 100; i++)
{
// 发布进度报告
backgroundWorker1.ReportProgress(i);
// 模拟耗时操作
Thread.Sleep(100);
}
}
- ProgressChangedイベントハンドラー内でUI画面を更新し、バックグラウンドタスクの進捗を表示します。
private void backgroundWorker1_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
// 更新UI界面的代码
progressBar1.Value = e.ProgressPercentage;
}
- RunWorkerCompletedイベントハンドラー内でバックグラウンドタスクが完了した後の処理を実行します。
private void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
// 后台任务完成后的操作
MessageBox.Show("后台任务已完成!");
}
- バックグラウンドワーカーオブジェクトを起動して、バックグラウンドでのタスクを実行します。
backgroundWorker1.RunWorkerAsync();
BackgroundWorkerを使用した基本的な流れはこうです。WorkerReportsProgressプロパティをtrueに設定することで進捗報告を有効にし、WorkerSupportsCancellationプロパティをtrueに設定することでキャンセル操作を有効にします。DoWorkイベントハンドラではBackgroundWorkerのReportProgressメソッドを使用して進捗報告を公開し、RunWorkerCompletedイベントハンドラではバックグラウンドタスクの完了後の操作を行うことができます。