1. 程式人生 > >Winform 全局異常捕獲

Winform 全局異常捕獲

exception err hand 信息 and domain bject 指示 退出

初學 Winform 時,相信很多人都遇到過自己的程序在運行中出現了沒有捕獲的異常,導致程序退出的問題,在這種情況下,程序往往會彈出一個很不友好的信息框,然後強行退出。

程序出現了未捕獲的異常,系統便認為它無法再繼續工作了,所以強行結束了程序,這也是很正常的行為。但如果我們想要給用戶顯示一個比較友好的信息框,或者記錄上傳錯誤日誌等等,那麽就需要添加全局異常處理程序。

要為 Winform 程序添加全局異常處理程序,需要對 UI 線程和其他線程分別處理,代碼如下:

static class Program
{
    /// 
    /// 應用程序的主入口點。
    /// 
    [STAThread]
    static void Main()
    {
        Application.EnableVisualStyles();
        // 設置 UI 線程異常處理程序,必須在 Application.Run() 方法之前添加
        Application.ThreadException += OnThreadException;
        // 要捕獲其他線程的異常,必須先調用 SetUnhandledExceptionMode() 方法指示程序如何處理異常
        Application.SetUnhandledExceptionMode(UnhandledExceptionMode.CatchException);
        // 設置其他線程異常處理程序,需要註意的是,此異常處理程序並不能阻止應用被終止
        AppDomain.CurrentDomain.UnhandledException += OnUnhandledException;
        Application.Run(new MainForm());
    }
    private static void OnThreadException(object sender, ThreadExceptionEventArgs e)
    {
        // UI 線程異常處理,根據需要可以選擇退出或不退出應用
        // ShowError((e.ExceptionObject as Exception).Message);
    }
    private static void OnUnhandledException(object sender, UnhandledExceptionEventArgs e)
    {
        // 其他線程異常處理,此方法結束後應用會被強制退出
        // ShowError(e.Exception.Message);
    }
}

Winform 全局異常捕獲