在下面的示例中,我使用 BackgroundWorker的 ReportProgress 功能:
void MyMethod()
{
if (!File.Exists)
{
bw.ReportProgress(0, "Error");
}
}
void worker_DoWork(object sender, DoWorkEventArgs e)
{
this.MyMethod1();
this.MyMethod2();
this.MyMethod3();
}
private void bw_ProgressChanged(object sender, System.ComponentModel.ProgressChangedEventArgs e)
{
string error = e.UserState as String;
if (!string.IsNullOrEmpty(error)
{
// stop BackgrowndWorker
}
}
在每个MyMethod()
我检查一下并执行 ReportProgress 。
如果有可能在我的情况下正确停止 BackgroundWorker ?
我需要改变代码架构的方式吗?
答案 0 :(得分:1)
ReportProgress
方法是...报告进度。您可以传递的唯一内容是百分比和用户状态。就这样。你不应该用它来传递错误。
相反,您可以做的最好的事情是抛出异常。这会冒泡到RunWorkerCompleted
事件处理程序,它具有名为Error
的事件参数属性。检查你写的事件处理程序中的属性,你知道出了什么问题。