Winform 全局異常捕獲
阿新 • • 發佈:2018-07-21
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 全局異常捕獲