WPF全局异常处理
using System; using System.Threading.Tasks; using System.Windows; using System.Windows.Threading; namespace WpfApplication1 { /// <summary> /// App.xaml 的交互逻辑 /// </summary> public partial class App : Application { private void Application_Startup(object sender, StartupEventArgs e) { Application.Current.StartupUri = new Uri("TestWindow.xaml",UriKind.Relative); //UI线程未捕获异常处理事件(UI主线程) this.DispatcherUnhandledException += App_DispatcherUnhandledException; //非UI线程未捕获异常处理事件(例如自己创建的一个子线程) AppDomain.CurrentDomain.UnhandledException += CurrentDomain_UnhandledException; //Task线程内未捕获异常处理事件 TaskScheduler.UnobservedTaskException += TaskScheduler_UnobservedTaskException; } //UI线程未捕获异常处理事件(UI主线程) private void App_DispatcherUnhandledException(object sender, DispatcherUnhandledExceptionEventArgs e) { Exception ex = e.Exception; string msg = String.Format("{0}\n\n{1}", ex.Message, ex.StackTrace);//异常信息 和 调用堆栈信息 MessageBox.Show(msg, "UI线程异常"); e.Handled = true;//表示异常已处理,可以继续运行 } //非UI线程未捕获异常处理事件(例如自己创建的一个子线程) //如果UI线程异常DispatcherUnhandledException未注册,则如果发生了UI线程未处理异常也会触发此异常事件 //此机制的异常捕获后应用程序会直接终止。没有像DispatcherUnhandledException事件中的Handler=true的处理方式,可以通过比如Dispatcher.Invoke将子线程异常丢在UI主线程异常处理机制中处理 private void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e) { Exception ex = e.ExceptionObject as Exception; if (ex != null) { string msg = String.Format("{0}\n\n{1}", ex.Message, ex.StackTrace);//异常信息 和 调用堆栈信息 MessageBox.Show(msg, "非UI线程异常"); } } //Task线程内未捕获异常处理事件 private void TaskScheduler_UnobservedTaskException(object sender, UnobservedTaskExceptionEventArgs e) { Exception ex = e.Exception; string msg = String.Format("{0}\n\n{1}", ex.Message, ex.StackTrace); MessageBox.Show(msg, "Task异常"); } //异常处理 封装 private void OnExceptionHandler(Exception ex) { if(ex != null) { string errorMsg = ""; if(ex.InnerException != null) { errorMsg += String.Format("【InnerException】{0}\n{1}\n",ex.InnerException.Message,ex.InnerException.StackTrace); } errorMsg += String.Format("{0}\n{1}", ex.Message, ex.StackTrace); LogManager.ErrorLog(errorMsg);//自己封装的日志管理 } } } }
原文:https://blog.csdn.net/i1tws/article/details/81807130
标签:Exception,处理事件,线程,ex,UI,WPF,异常,全局 From: https://www.cnblogs.com/axiaoshuye/p/17116989.html