|
在WinForm中使用全局异常捕获处理
在WinForm应用程序中,全局异常捕获是确保程序稳定性的关键。通过在Program类的Main方法中设置全局异常处理,可以有效地捕获并处理未预见的异常,从而避免程序崩溃。
注册全局异常事件
- [STAThread]
- static void Main()
- {
- // 注册全局异常捕获事件
- Application.ThreadException += new System.Threading.ThreadExceptionEventHandler(Application_ThreadException);
- AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(CurrentDomain_UnhandledException);
- // 启动应用程序
- Application.EnableVisualStyles();
- Application.SetCompatibleTextRenderingDefault(false);
- Application.Run(new MainForm());
- }
复制代码 处理未捕获的异常并记录日志
在全局异常事件处理方法中,我们可以编写逻辑来处理异常,例如记录日志、显示错误消息等。- // 处理未捕获的异常并记录日志
- private static void Application_ThreadException(object sender, System.Threading.ThreadExceptionEventArgs e)
- {
- // 处理异常,如记录日志、显示错误消息等
- Exception exception = e.Exception;
- // ToDo: 处理异常的逻辑代码
- // 关闭应用程序或显示错误信息
- // Application.Exit();
- // MessageBox.Show("发生错误:" + exception.Message, "错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
- }
- // 处理未捕获的异常并记录日志
- private static void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e)
- {
- // 处理异常,如记录日志、显示错误消息等
- Exception exception = e.ExceptionObject as Exception;
- // ToDo: 处理异常的逻辑代码
- // 关闭应用程序或显示错误信息
- // Application.Exit();
- // MessageBox.Show("发生错误:" + exception.Message, "错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
- }
复制代码 示例代码
- using System;
- using System.Windows.Forms;
- using exeStartTool;
- namespace CopyTest
- {
- internal static class Program
- {
- /// <summary>
- /// 应用程序的主入口点。
- /// </summary>
- [STAThread]
- private static void Main()
- {
- //处理未捕获的异常
- //Application.SetUnhandledExceptionMode(UnhandledExceptionMode.CatchException);
- //ThreadException 处理UI线程异常
- Application.ThreadException += new System.Threading.ThreadExceptionEventHandler(Application_ThreadException);
- //UnhandledException 处理非UI线程异常
- AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(CurrentDomain_UnhandledException);
- Application.EnableVisualStyles();
- Application.SetCompatibleTextRenderingDefault(false);
- Application.Run(new ExeStart());
- }
- static void Application_ThreadException(object sender,System.Threading.ThreadExceptionEventArgs e)
- {
- string str = "";
- string strDateInfo = "\r\n\r\n出现应用程序未处理的异常:" + DateTime.Now.ToString() + "\r\n";
- Exception error = e.Exception as Exception;
- if (error != null)
- {
- string logInfo = string.Format(strDateInfo + "异常类型:{0}\r\n异常消息:{1}\r\n异常信息:{2}\r\n",error.GetType().Name,error.Message,error.StackTrace);
- str = string.Format(strDateInfo + "异常类型:{0}\r\n异常消息:{1}\r\n",
- error.GetType().Name,error.Message);
- } else
- {
- str = string.Format("应用程序线程错误:{0}",e);
- }
- MessageBox.Show(str,"系统错误",MessageBoxButtons.OK,MessageBoxIcon.Error);
- }
- static void CurrentDomain_UnhandledException(object sender,UnhandledExceptionEventArgs e)
- {
- string str = "";
- Exception error = e.ExceptionObject as Exception;
- string strDateInfo = "出现应用程序未处理的异常:" + DateTime.Now.ToString() + "\r\n";
- if (error != null)
- {
- string logInfo = string.Format(strDateInfo + "Application UnhandledException:{0};\n\r堆栈信息:{1}",error.Message,error.StackTrace);
- str = string.Format(strDateInfo + "Application UnhandledException:{0};\n\r",error.Message);
- } else
- {
- str = string.Format("Application UnhandledError:{0}",e);
- }
- MessageBox.Show(str,"系统错误",MessageBoxButtons.OK,MessageBoxIcon.Error);
- }
- }
- }
复制代码 来源:https://www.cnblogs.com/ouyangkai/p/18408045
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作! |
|