【发布时间】:2013-11-05 01:27:35
【问题描述】:
所有,我已经知道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 中有一个名为“Result”的属性,它有什么用?我该如何使用它?
是否有可能收到我的自定义异常消息而不是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();
}
}
【问题讨论】:
标签: c# winforms backgroundworker