2012-06-02 58 views
3

我試圖捕獲在C#Windows窗體應用程序中的所有無關例外。我已將以下代碼添加到Program.cs文件中,但未捕獲到異常,我收到異常,例如NullReferenceException。 我在做什麼錯?無法捕獲在Winforms中的未處理的異常

static void Main() 
{ 
    System.Windows.Forms.Application.SetUnhandledExceptionMode(UnhandledExceptionMode.CatchException); 
    System.Windows.Forms.Application.ThreadException += new System.Threading.ThreadExceptionEventHandler(OnGuiUnhandedException); 
    AppDomain.CurrentDomain.UnhandledException += OnUnhandledException; 
    var form = new MainForm(); 
    form.ShowDialog(); 
} 

private static void HandleUnhandledException(Object o) 
{ 
    // TODO: Log it! 
    Exception e = o as Exception; 
    if (e != null) 
    { 
    } 
} 

private static void OnUnhandledException(Object sender, UnhandledExceptionEventArgs e) 
{ 
    HandleUnhandledException(e.ExceptionObject); 
} 

private static void OnGuiUnhandedException(object sender, System.Threading.ThreadExceptionEventArgs e) 
{ 
    HandleUnhandledException(e.Exception); 
} 

編輯:我能捕捉到的異常程序的Visual Studio之外的外部運行時,但是從Visual Studio調試運行時,我不能趕上Exception.I知道調試是錯誤removal.Should我運行程序在構建模式下捕獲異常?

+0

郵政編碼,實際上重現了問題。 –

回答

2

嘗試禁用VS中的異常捕獲,因爲它似乎在它到達處理程序之前捕獲異常。

調試>異常...>取消選中用戶未處理的公共語言運行時異常。

0

你訂閱只事件提供了檢查異常的一種手段;它們並不意味着允許你抑制或從異常中恢復。

AppDomain.UnhandledException

此事件提供未捕獲異常的通知。它允許應用程序在系統默認處理程序向用戶報告異常並終止應用程序之前記錄有關異常的信息。

如果您想在記錄日誌後從異常中恢復,則需要在代碼中使用try-catch塊。