翼度科技»论坛 编程开发 .net 查看内容

在WinForm中使用全局异常捕获处理

10

主题

10

帖子

30

积分

新手上路

Rank: 1

积分
30
在WinForm中使用全局异常捕获处理

在WinForm应用程序中,全局异常捕获是确保程序稳定性的关键。通过在Program类的Main方法中设置全局异常处理,可以有效地捕获并处理未预见的异常,从而避免程序崩溃。
注册全局异常事件
  1. [STAThread]
  2. static void Main()
  3. {
  4.     // 注册全局异常捕获事件
  5.     Application.ThreadException += new System.Threading.ThreadExceptionEventHandler(Application_ThreadException);
  6.     AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(CurrentDomain_UnhandledException);
  7.     // 启动应用程序
  8.     Application.EnableVisualStyles();
  9.     Application.SetCompatibleTextRenderingDefault(false);
  10.     Application.Run(new MainForm());
  11. }
复制代码
处理未捕获的异常并记录日志

在全局异常事件处理方法中,我们可以编写逻辑来处理异常,例如记录日志、显示错误消息等。
  1. // 处理未捕获的异常并记录日志
  2. private static void Application_ThreadException(object sender, System.Threading.ThreadExceptionEventArgs e)
  3. {
  4.     // 处理异常,如记录日志、显示错误消息等
  5.     Exception exception = e.Exception;
  6.     // ToDo: 处理异常的逻辑代码
  7.     // 关闭应用程序或显示错误信息
  8.     // Application.Exit();
  9.     // MessageBox.Show("发生错误:" + exception.Message, "错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
  10. }
  11. // 处理未捕获的异常并记录日志
  12. private static void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e)
  13. {
  14.     // 处理异常,如记录日志、显示错误消息等
  15.     Exception exception = e.ExceptionObject as Exception;
  16.     // ToDo: 处理异常的逻辑代码
  17.     // 关闭应用程序或显示错误信息
  18.     // Application.Exit();
  19.     // MessageBox.Show("发生错误:" + exception.Message, "错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
  20. }
复制代码
示例代码
  1. using System;
  2. using System.Windows.Forms;
  3. using exeStartTool;
  4. namespace CopyTest
  5. {
  6.     internal static class Program
  7.     {
  8.         /// <summary>
  9.         /// 应用程序的主入口点。
  10.         /// </summary>
  11.         [STAThread]
  12.         private static void Main()
  13.         {
  14.             //处理未捕获的异常
  15.             //Application.SetUnhandledExceptionMode(UnhandledExceptionMode.CatchException);
  16.             //ThreadException 处理UI线程异常
  17.             Application.ThreadException += new System.Threading.ThreadExceptionEventHandler(Application_ThreadException);
  18.             //UnhandledException 处理非UI线程异常
  19.             AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(CurrentDomain_UnhandledException);
  20.             Application.EnableVisualStyles();
  21.             Application.SetCompatibleTextRenderingDefault(false);
  22.             Application.Run(new ExeStart());
  23.         }
  24.         static void Application_ThreadException(object sender,System.Threading.ThreadExceptionEventArgs e)
  25.         {
  26.             string str = "";
  27.             string strDateInfo = "\r\n\r\n出现应用程序未处理的异常:" + DateTime.Now.ToString() + "\r\n";
  28.             Exception error = e.Exception as Exception;
  29.             if (error != null)
  30.             {
  31.                 string logInfo = string.Format(strDateInfo + "异常类型:{0}\r\n异常消息:{1}\r\n异常信息:{2}\r\n",error.GetType().Name,error.Message,error.StackTrace);
  32.                 str = string.Format(strDateInfo + "异常类型:{0}\r\n异常消息:{1}\r\n",
  33.                 error.GetType().Name,error.Message);
  34.             } else
  35.             {
  36.                 str = string.Format("应用程序线程错误:{0}",e);
  37.             }
  38.             MessageBox.Show(str,"系统错误",MessageBoxButtons.OK,MessageBoxIcon.Error);
  39.         }
  40.         static void CurrentDomain_UnhandledException(object sender,UnhandledExceptionEventArgs e)
  41.         {
  42.             string str = "";
  43.             Exception error = e.ExceptionObject as Exception;
  44.             string strDateInfo = "出现应用程序未处理的异常:" + DateTime.Now.ToString() + "\r\n";
  45.             if (error != null)
  46.             {
  47.                 string logInfo = string.Format(strDateInfo + "Application UnhandledException:{0};\n\r堆栈信息:{1}",error.Message,error.StackTrace);
  48.                 str = string.Format(strDateInfo + "Application UnhandledException:{0};\n\r",error.Message);
  49.             } else
  50.             {
  51.                 str = string.Format("Application UnhandledError:{0}",e);
  52.             }
  53.             MessageBox.Show(str,"系统错误",MessageBoxButtons.OK,MessageBoxIcon.Error);
  54.         }
  55.     }
  56. }
复制代码
来源:https://www.cnblogs.com/ouyangkai/p/18408045
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作!

上一篇: WinFrom项目结构

下一篇: [STAThread]特性

举报 回复 使用道具