总而言之,我已经知道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();
}
}