如何通过 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 的事件参数 属性。检查您编写的事件处理程序中的 属性,您就知道出了什么问题。