winform全局异常捕获,为何不能100%捕获到,仍有部份错误被直接抛出了???
全局异常捕获代码如下:
//处理未捕获的异常 Application.SetUnhandledExceptionMode(UnhandledExceptionMode.CatchException); //处理UI线程异常 Application.ThreadException += Application_ThreadException; //处理非UI线程异常 AppDomain.CurrentDomain.UnhandledException += CurrentDomain_UnhandledException; static void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e) { var ex = e.ExceptionObject as Exception; if (ex != null) { MessageBox.Show(ex.Message, "系统异常", MessageBoxButtons.OK, MessageBoxIcon.Error); } } static void Application_ThreadException(object sender, System.Threading.ThreadExceptionEventArgs e) { var ex = e.Exception; if (ex != null) { MessageBox.Show(ex.Message, "系统异常", MessageBoxButtons.OK, MessageBoxIcon.Error); } }
仍有部份异常未能捕获到,造成.NET FRAMEWORK的报错,同时有些还导至程序异常退出。
求大神们指教,谢谢!
这个并不是给你去做恢复的,这个只是告诉你这里有异常了,你准备下后事,处理完了我就退出了。
少了一个,非UI线程不是UnHandledException
//设置应用程序处理异常方式:ThreadException处理 Application.SetUnhandledExceptionMode(UnhandledExceptionMode.CatchException); //处理UI线程异常 Application.ThreadException += new System.Threading.ThreadExceptionEventHandler(Application_ThreadException); //处理未捕获的异常 AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(CurrentDomain_UnhandledException); //处理线程异常 TaskScheduler.UnobservedTaskException += (sender, erro) => { LogHelper.ErrorLog("多线程异常", erro.Exception); MessageBox.Show("程序出现异常(task):" + erro.Exception.ToString()); };
目前.net的处理策略是,非UI线程假如有异常会直接退出程序,UI线程异常可不退出。