BackgroundWorker
すべて、 WinForm で複数のスレッドのケースを処理するための基本的な使用法は既に知っていました。コード構造は以下のようになります。
アプリケーションのメインスレッドで。BackgroundWork を開始するだけです。
if (backgroundWorker1.IsBusy != true)
{
// Start the asynchronous operation.
backgroundWorker1.RunWorkerAsync();
}
次に、DoWork
イベントを発生させます。それで、そこで何かをすることができます。
private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
BackgroundWorker worker = sender as BackgroundWorker;
......
// report progress.
worker.ReportProgress(iProgress);
....
}
次に、ProgressChanged
イベントを処理して BackgroundWorker の進行状況を表示するだけです。
private void backgroundWorker1_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
//show progress.
resultLabel.Text = (e.ProgressPercentage.ToString() + "%");
}
終了後DoWork
、または何らかの例外が発生しました。イベントRunWorkerCompleted
が発生します。
このイベント ハンドルに関する質問があります。それらを確認するのを手伝ってください。ありがとう。
に「結果」という名前のプロパティがあることに気付きましたRunWorkerCompletedEventArgs e
。何に使用しますか? どのように使用できますか?
代わりにカスタム例外メッセージを受け取る可能性はありますe.error
か? あるなら、どうやって作るの?
private void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
if (e.Cancelled == true)
{
resultLabel.Text = "Canceled!";
}
else if (e.Error != null)
{
resultLabel.Text = "Error: " + e.Error.Message;
}
else
{
resultLabel.Text = e.Result.ToString();
}
}