使用BackgroundWorker进行错误处理

6
我知道,你可以在RunWorkerCompleted处理程序中处理BackgroundWorker错误,就像下面的代码一样。
var worker = new BackgroundWorker();
worker.DoWork += (sender, e) => 
    { 
        throw new InvalidOperationException("oh shiznit!"); 
    };
worker.RunWorkerCompleted += (sender, e) =>
    {
        if(e.Error != null)
        {
            MessageBox.Show("There was an error! " + e.Error.ToString());
        }
    };
worker.RunWorkerAsync();

但我的问题是我仍然收到一条消息:在用户代码中未处理的错误,位于行。
 throw new InvalidOperationException("oh shiznit!"); 

我该如何解决这个问题?

你在WinForms应用程序中测试过吗?还是在控制台中? - H H
2个回答

11

您收到此消息是因为您已连接了调试器。尝试在没有调试器的情况下启动应用程序:不会触发任何异常,并且当工作线程完成操作后会显示消息框。


1
Mike来到SO并得到了他所需的答案。Mike不了解SO社区或游戏规则。Mike没有将答案标记为正确。不要像Mike一样。 - Mark Cooper

1

我无法重现这个错误。以下代码可以正常工作:

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
    }

    private void button1_Click(object sender, EventArgs e)
    {
        var worker = new BackgroundWorker();
        worker.DoWork += (s, evt) =>
        {
            throw new InvalidOperationException("oops");
        };
        worker.RunWorkerCompleted += (s, evt) =>
        {
            if (evt.Error != null)
            {
                MessageBox.Show(evt.Error.Message);
            }
        };
        worker.RunWorkerAsync();
    }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接