static class Program { /// <summary> /// 應用程序的主入口點。 /// </summary> [STAThread] static void Main() { Application.ThreadException += Application_ThreadException; Application.SetUnhandledExceptionMode(UnhandledExceptionMode.CatchException); AppDomain.CurrentDomain.UnhandledException += CurrentDomain_UnhandledException; Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); Application.Run(new MainForm()); } /// <summary> /// 處理應用程序域內的未處理異常(非UI線程異常) /// </summary> /// <param name="sender"></param> /// <param name="e"></param> static void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e) { try { Exception ex = e.ExceptionObject as Exception; MessageBox.Show(ex.Exception.Message); } catch { } } /// <summary> /// 處理應用程序的未處理異常(UI線程異常) /// </summary> /// <param name="sender"></param> /// <param name="e"></param> static void Application_ThreadException(object sender, ThreadExceptionEventArgs e) { try { MessageBox.Show(e.Exception.Message); } catch { } } }
這裏有一個須要注意的地方,以下代碼 Application.Run(new MainForm()); 這裏只能執行一次 Application.Run代碼,若是你像下面這樣寫代碼的話:post
Application.Run(new Form1()); Application.Run(new Form2());
那麼若是在Form2出現未處理的異常(UI異常或是非UI異常),上面的異常處理程序就沒法捕獲了。 spa