如何通过ReportProgress中的特定消息停止BackgroundWorker

时间:2015-07-19 13:11:07

标签: c# backgroundworker

在下面的示例中,我使用 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

我需要改变代码架构的方式吗?

1 个答案:

答案 0 :(得分:1)

ReportProgress方法是...报告进度。您可以传递的唯一内容是百分比和用户状态。就这样。你不应该用它来传递错误。

相反,您可以做的最好的事情是抛出异常。这会冒泡到RunWorkerCompleted事件处理程序,它具有名为Error的事件参数属性。检查你写的事件处理程序中的属性,你知道出了什么问题。