2012-02-22 53 views
1

我有一個從應用窗戶,Program.cs中這樣的代碼:catch錯誤

static class Program 
{ 
    /// <summary> 
    /// The main entry point for the application. 
    /// </summary> 
    [STAThread] 
    static void Main() 
    { 
     Application.EnableVisualStyles(); 
     Application.SetCompatibleTextRenderingDefault(false); 
     Application.ThreadException += (sndr, evnt) => 
     { 
      MessageBox.Show("An error occur. Please contact your administrator.\nError description: " + 
       evnt.Exception.Message + "\nStack trace:\n" + evnt.Exception.StackTrace, 
       evnt.Exception.GetType().ToString(), MessageBoxButtons.OK, MessageBoxIcon.Error); 
     }; 
     Application.Run(new frmLogin()); 
    } 
} 

但是,當一個例外是BackgroundWorker.DoWork事件中拋出,Application.ThreadException沒抓住它。

如何能在Application.ThreadException漁獲物由BackgroundWorker創建一個不同的線程例外嗎?

我知道在Application.ThreadException中捕捉錯誤並不是一個好的做法,但我們只將它用作我們的最後一級錯誤捕捉。

我的代碼是在C#中,框架4,內置VS2010 Pro。

請幫助。提前致謝。

+1

這個問題是http://stackoverflow.com/questions/4284986/c-sharp-catching-unhandled-exception-on-seperate-threads的副本 – 2012-02-22 05:48:06

回答

4

請參閱this question:BackgroundWorker異常不會像那樣傳播,因此您無法在ThreadException中捕獲它們。

BackgroundWorkers拋出異常的調用RunWorkerCompleted像往常一樣,但設置事件參數的Error財產。

1

BackgroundWorker爲您捕獲異常(不會公開給Application.ThreadException或AppDomain.UnhandledException)並將該異常傳遞給RunWorkerCompleted事件的參數。您將處理RunWorkerCompleted事件處理程序中的異常。

存在RunWorkerCompletedEventArgs.Error,您可以在RunWorkerCompleted事件觸發後獲取異常。

private void backgroundWorker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) 
    { 
     if (e.Error != null) 
     { 
      // handle exception here 
     } 
    } 
+0

謝謝..我從來沒有想過這樣的'RunWorkerCompletedEventArgs。錯誤'存在.. – 2012-02-22 06:06:11