すべて、私はすでに基本的な使用方法を知っています.WindFormで複数のスレッドのケースを処理するにはBackgroundWorker
です。コード構造は以下のようになります。BackgroundWorkerイベントの使用方法RunWorkerCompleted
アプリケーションのメインスレッドです。 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
の代わりに私のカスタム例外メッセージを受け取る可能性はありますか?もしあれば、それを作る方法? RunWorkerCompletedEventArgs
で
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();
}
}
どうERROR' 'についてを使用してクラス?これはOPが求めていたものです。 –
答えが更新されました。ありがとう。 (電話で読んで逃した) – SimonGoldstone