WPF全域性異常處理
阿新 • • 發佈:2022-05-09
private void RegisterEvents() { //Task執行緒內未捕獲異常處理事件 TaskScheduler.UnobservedTaskException += TaskScheduler_UnobservedTaskException;//Task異常 //UI執行緒未捕獲異常處理事件(UI主執行緒) DispatcherUnhandledException += App_DispatcherUnhandledException; //非UI執行緒未捕獲異常處理事件(例如自己建立的一個子執行緒) AppDomain.CurrentDomain.UnhandledException += CurrentDomain_UnhandledException; } //Task執行緒內未捕獲異常處理事件 private void TaskScheduler_UnobservedTaskException(object? sender, UnobservedTaskExceptionEventArgs e) { try { Exception? exception = e.Exception as Exception; if (exception != null) { this.Logger.Error(exception); } } catch (Exception ex) { this.Logger.Error(ex); } finally { e.SetObserved(); } } //非UI執行緒未捕獲異常處理事件(例如自己建立的一個子執行緒) private void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e) { try { var exception = e.ExceptionObject as Exception; if (exception != null) { this.Logger.Error(exception); } } catch (Exception ex) { this.Logger.Error(ex); } finally { //ignore } } //UI執行緒未捕獲異常處理事件(UI主執行緒) private void App_DispatcherUnhandledException(object sender, System.Windows.Threading.DispatcherUnhandledExceptionEventArgs e) { try { this.Logger.Error(e.Exception); } catch (Exception ex) { this.Logger.Error(ex); } finally { e.Handled = true; } }