zoukankan      html  css  js  c++  java
  • ThreadException

    在windows窗体程序中,使用 ThreadException 事件来处理 UI 线程异常,使用 UnhandledException 事件来处理非 UI 线程异常。ThreadException可以阻止应用程序终止。具体使用方法如下:

               [STAThread]
               static void Main()
               {
                   Application.ThreadException += new ThreadExceptionEventHandler(UIThreadException);
                   Application.SetUnhandledExceptionMode(UnhandledExceptionMode.CatchException);
                   AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(CurrentDomain_UnhandledException);
                   
                   //获取该应用程序的名称,判断是否在进程中存在,如果存在,则需要关闭再重新启动
                   var processName=Process.GetCurrentProcess().ProcessName;
                   if((Process.GetProcessesByName(aProcessName)).GetUpperBound(0) > 0) 
                   {
                       MessageBox.Show("程序已经启动,需要关闭才能重新开启!", "系统提示", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                   }
                   else
                   {
                       Application.EnableVisualStyles();
                       Application.SetCompatibleTextRenderingDefault(false);
                       Application.Run(new Form());
                   }   
               }
               private static void UIThreadException(object sender, ThreadExceptionEventArgs e)
               {
                   try
                   {
                       string errorMsg = "Windows窗体线程异常";
                       LogUnhandledException(errorMsg,e.Exception);
                       //MessageBox.Show(errorMsg + e.Exception.Message + Environment.NewLine + e.Exception.StackTrace);
                   }
                   catch
                   {
                       MessageBox.Show("不可恢复的Windows窗体异常,应用程序将退出!");
                   }
               }
               private static void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e)
               {
                   try
                   {
                       Exception ex = (Exception)e.ExceptionObject;
                       string errorMsg = "非Windows窗体线程异常";
                       LogUnhandledException(errorMsg,ex);
                       //MessageBox.Show(errorMsg + ex.Message + Environment.NewLine + ex.StackTrace);
                   }
                   catch
                   {
                       MessageBox.Show("不可恢复的非Windows窗体线程异常,应用程序将退出!");
                   }
               }
    
              //异常日志处理
              private static void LogUnhandledException(string message, Exception ex)
              {
                  string path = AppDomain.CurrentDomain.BaseDirectory+"Logs";
                  if(path!=null&&path!="")
                  {
                      if (!(Directory.Exists(path)))
                      {
                         Directory.CreateDirectory(path); //创建日志文件夹
                      }
                      path += string.Format(@"\{0}.log", DateTime.Now.ToString("yyyy-MM-dd"));
    
                      using (var sw = new StreamWriter(path, true, Encoding.Default))
                      {
                         sw.WriteLine("**************************************************************************************");
                         sw.WriteLine(DateTime.Now.ToString());
                         if (ex != null)
                         {
                            sw.WriteLine("异常信息:");
                            sw.WriteLine(message);
                            sw.WriteLine("【Message】" + ex.Message);
                            sw.WriteLine("【ErrorType】:" + ex.GetType());
                            sw.WriteLine("【TargetSite】" + ex.TargetSite);
                            sw.WriteLine("【StackTrace】" + ex.StackTrace);
                         }
                         else sw.WriteLine("Exception Is Null");
                         sw.WriteLine();
                      }
                  }
              }
              
              
      
    世界上最可怕事情是比我们优秀的人比我们还努力
  • 相关阅读:
    WebApi之DOM的基本介绍
    Javascript常见数据类型API
    JavaScript作用域与对象
    Javascript数组与函数初识
    久等了,你要的 Python 书籍推荐,来了
    六种酷炫Python运行进度条
    python获取系统内存占用信息的实例方法
    在图像中隐藏数据:用 Python 来实现图像隐写术
    付费?是不可能的!20行Python代码实现一款永久免费PDF编辑工具
    Python数据分析实战:使用pyecharts进行数据可视化
  • 原文地址:https://www.cnblogs.com/AlexOneBlogs/p/7398442.html
Copyright © 2011-2022 走看看