对于winform应用程序补抓异常信息,我们经常用到得try catch。
如果代码中在某个地方执行异常,但是没有加try catch,这个时候就需要做一些全局异常捕捉。
怎么做到全局异常捕捉。winform程序在启动cs中,Program.cs添加以下事件
1.处理未捕获的异常 SetUnhandledExceptionMode
2.处理UI线程异常 ThreadException
3.处理非UI线程异常 UnhandledException
1 /// <summary> 2 /// 应用程序的主入口点。 3 /// </summary> 4 [STAThread] 5 static void Main() 6 { 7 try 8 { 9 10 //处理未捕获的异常 11 Application.SetUnhandledExceptionMode(UnhandledExceptionMode.CatchException); 12 13 //处理UI线程异常 14 Application.ThreadException += Application_ThreadException; 15 //处理非UI线程异常 16 AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(CurrentDomain_UnhandledException); 17 18 Application.EnableVisualStyles(); 19 Application.SetCompatibleTextRenderingDefault(false); 20 21 …… 22 23 } 24 catch (Exception ex) 25 { 26 …… 27 } 28 29 } 30 31 32 33 /// <summary> 34 ///处理UI线程异常 35 /// </summary> 36 /// <param name="sender"></param> 37 /// <param name="e"></param> 38 static void Application_ThreadException(object sender, System.Threading.ThreadExceptionEventArgs e) 39 { 40 string str; 41 var strDateInfo = "出现应用程序未处理的异常:" + DateTime.Now + " "; 42 var error = e.Exception; 43 if (error != null) 44 { 45 str = string.Format(strDateInfo + "异常类型:{0} 异常消息:{1} 异常信息:{2} ", 46 error.GetType().Name, error.Message, error.StackTrace); 47 } 48 else 49 { 50 str = string.Format("应用程序线程错误:{0}", e); 51 } 52 53 MessageBox msg = new MessageBox(); 54 msg.title = "系统错误"; 55 msg.text = "发生错误,请查看程序日志!"; 56 msg.ShowDialog(); 57 //Environment.Exit(0); 58 } 59 60 /// <summary> 61 /// 处理非UI线程异常 62 /// </summary> 63 /// <param name="sender"></param> 64 /// <param name="e"></param> 65 static void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e) 66 { 67 var error = e.ExceptionObject as Exception; 68 var strDateInfo = "出现应用程序未处理的异常:" + DateTime.Now + " "; 69 var str = error != null ? string.Format(strDateInfo + "Application UnhandledException:{0}; 堆栈信息:{1}", error.Message, error.StackTrace) : string.Format("Application UnhandledError:{0}", e); 70 71 MessageBox msg = new MessageBox(); 72 msg.title = "系统错误"; 73 msg.text = "发生错误,请查看程序日志!"; 74 msg.ShowDialog(); 75 //Environment.Exit(0); 76 }