.NET&C#的異常處理
阿新 • • 發佈:2018-11-08
args inf win 分享圖片 線程 patch tro handler environ
- 應用程序未捕獲異常的處理
- 處理未捕獲的異常是每個應用程序起碼有的功能
- 無論是Windows窗體程序還是WPF程序,我們都看到捕獲的異常當中分為"窗體線程異常"和"非窗體線程異常"。
- WinForm等類型的應用程序
- 使用UnhandledException來處理非 UI 線程異常
-
1 static void Main(string[] args) 2 { 3 AppDomain.CurrentDomain.UnhandledException +=new UnhandledExceptionEventHandler(CurrentDomain_UnhandledException);
View Code - 值得註意的是,UnhandledException提供的機制並不能阻止應用程序終止
-
- 使用ThreadException來處理 UI 線程異常
-
1 [STAThread] 2 static void Main() 3 { 4 Application.ThreadException +=new ThreadExceptionEventHandler(UIThreadException); 5 } 6 7 private static void
View Code - 值得註意的是,ThreadException可以阻止應用程序終止。
-
- 使用UnhandledException來處理非 UI 線程異常
- WPF類型的應用程序
- WPF的UI線程和Windows的UI線程有點不一樣。WPF的UI線程是交給一個叫做調度器的類:Dispatcher。
-
1 代碼 2 3 public App() 4 { 5 this.DispatcherUnhandledException +=new DispatcherUnhandledExceptionEventHandler(Application_DispatcherUnhandledException); 6 AppDomain.CurrentDomain.UnhandledException +=new UnhandledExceptionEventHandler(CurrentDomain_UnhandledException); 7 } 8 9 void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e) 10 { 11 try 12 { 13 Exception ex = e.ExceptionObject as Exception; 14 string errorMsg ="非WPF窗體線程異常 : \n\n"; 15 MessageBox.Show(errorMsg + ex.Message + Environment.NewLine + ex.StackTrace); 16 } 17 catch 18 { 19 MessageBox.Show("不可恢復的WPF窗體線程異常,應用程序將退出!"); 20 } 21 } 22 23 privatevoid Application_DispatcherUnhandledException(object sender, DispatcherUnhandledExceptionEventArgs e) 24 { 25 try 26 { 27 Exception ex = e.Exception; 28 string errorMsg ="WPF窗體線程異常 : \n\n"; 29 MessageBox.Show(errorMsg + ex.Message + Environment.NewLine + ex.StackTrace); 30 } 31 catch 32 { 33 MessageBox.Show("不可恢復的WPF窗體線程異常,應用程序將退出!"); 34 } 35 }
View Code
- 多線程中的異常處理
- try...catch放在線程中去處理異常,放在外面的話會捕獲不到
.NET&C#的異常處理