C# 如何记录未捕获的异常

介绍

  • 本人在制作Winform项目时碰到了try catch无法捕获的异常,浏览了好多微博,以示记录。

选用的异常事件

  • Application.ThreadException 在发生应用程序UI主线程中未捕获线程异常时发生,触发的事件;
  • AppDomain.CurrentDomain.UnhandledException 当后台线程中某个异常未被捕获时触发;

主程序入口添加绑定事件

 //设置应用程序处理异常方式:ThreadException处理
 Application.SetUnhandledExceptionMode(UnhandledExceptionMode.CatchException);
 //处理UI线程异常
 Application.ThreadException += new System.Threading.ThreadExceptionEventHandler(Application_ThreadException);
 //处理非UI线程异常
 AppDomain.CurrentDomain.UnhandledException += newUnhandledExceptionEventHandler(CurrentDomain_UnhandledException);

绑定事件内容

  private static void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e)
  {
      string str = GetExceptionMsg(e.ExceptionObject as Exception, e.ToString());
      // 后续处理,保存或输出
      SaveLog(str);
  }
  private static void Application_ThreadException(object sender, ThreadExceptionEventArgs e)
  {
      string str = GetExceptionMsg(e.Exception, e.ToString());
      // 后续处理,保存或输出
      SaveLog(str);
  }
  static string GetExceptionMsg(Exception ex, string backStr)
  {
      StringBuilder sb = new StringBuilder();
      sb.AppendLine("****************************异常文本****************************");
      sb.AppendLine("【出现时间】:" + DateTime.Now.ToString());
      if (ex != null)
      {
          sb.AppendLine("【异常类型】:" + ex.GetType().Name);
          sb.AppendLine("【异常信息】:" + ex.Message);
          sb.AppendLine("【堆栈调用】:" + ex.StackTrace);
          sb.AppendLine("【异常方法】:" + ex.TargetSite);
      }
      else
      {
          sb.AppendLine("【未处理异常】:" + backStr);
      }
      sb.AppendLine("***************************************************************");
      return sb.ToString();
  }
  //做为记录
  public static void SaveLog(string log)
    {
      string filePath =AppDomain.CurrentDomain.BaseDirectory+ @"\Exception.txt";
      //采用using关键字,会自动释放
      using (FileStream fs = new FileStream(filePath, FileMode.Append))
      {
        using (StreamWriter sw = new StreamWriter(fs, Encoding.Default))
        {
          sw.WriteLine(log);
        }
      }
    }
发布了8 篇原创文章 · 获赞 6 · 访问量 5937
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 技术黑板 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览