2010-10-19 46 views
5
处理

我知道,你可以在RunWorkerCompleted处理程序处理BackgroundWorker的错误,就像下面的代码误差与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(); 

但我的问题是,我还收到一条消息:错误是在用户代码unhadled上线

throw new InvalidOperationException("oh shiznit!"); 

我该如何解决这个问题?

+0

你在WinFormss应用程序中测试这个吗?还是控制台? – 2010-10-19 09:21:40

回答

9

您收到它,因为您有调试器连接。尝试在没有调试器的情况下启动应用程序:不会触发异常,并且在工作人员完成操作时显示MessageBox。

+0

是的,这是正确的 – mike 2010-10-19 08:43:30

+4

把它标记为答案吧! – Tim 2010-10-20 14:32:01

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(); 
    } 
}