如何通过 ReportProgress 中的特定消息停止 BackgroundWorker
How to stop BackgroundWorker by specific message in ReportProgress
在下面的示例中,我使用了 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?
我需要改变我的代码架构方式吗?
ReportProgress
方法是...报告进度。您唯一可以传入的是百分比和用户状态。就这样。你不应该用它来传递错误。
相反,您能做的最好的事情就是抛出异常。这将冒泡到 RunWorkerCompleted
事件处理程序,它有一个名为 Error
的事件参数 属性。检查您编写的事件处理程序中的 属性,您就知道出了什么问题。
在下面的示例中,我使用了 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?
我需要改变我的代码架构方式吗?
ReportProgress
方法是...报告进度。您唯一可以传入的是百分比和用户状态。就这样。你不应该用它来传递错误。
相反,您能做的最好的事情就是抛出异常。这将冒泡到 RunWorkerCompleted
事件处理程序,它有一个名为 Error
的事件参数 属性。检查您编写的事件处理程序中的 属性,您就知道出了什么问题。