2010-10-19 89 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(); 
    } 
}