根据网上的资料稍微修改了一下,原理很简单。static void Main() { GlobalExceptionCapture(() => { Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); Application.Run(new Form1()); }); }

根据网上的资料稍微修改了一下,原理很简单,代码如下:

using System;using System.Collections.Generic;using System.Linq;using System.Windows.Forms;using System.Text;namespace WindowsFormsApplication2{ static class Program {  ///   /// 应用程序的主入口点。  ///   [STAThread]  static void Main()  {   GlobalExceptionCapture(() =>    {    Application.EnableVisualStyles();    Application.SetCompatibleTextRenderingDefault(false);    Application.Run(new Form1());   });     }  static void GlobalExceptionCapture(Action mainContent)   {   try   {    //设置应用程序处理异常方式:ThreadException处理    Application.SetUnhandledExceptionMode(UnhandledExceptionMode.CatchException);    //处理UI线程异常    Application.ThreadException += new System.Threading.ThreadExceptionEventHandler(Application_ThreadException);    //处理非UI线程异常    AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(CurrentDomain_UnhandledException);    #region 应用程序Main()内容包装的委托    mainContent();    #endregion   }   catch (Exception ex)   {    string str = GetExceptionMsg(ex, string.Empty);    MessageBox.Show(str, "系统错误", MessageBoxButtons.OK, MessageBoxIcon.Error);   }  }  static void Application_ThreadException(object sender, System.Threading.ThreadExceptionEventArgs e)  {   string str = GetExceptionMsg(e.Exception, e.ToString());   MessageBox.Show(str, "系统错误", MessageBoxButtons.OK, MessageBoxIcon.Error);   //Log.Write(str);  }  static void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e)  {   string str = GetExceptionMsg(e.ExceptionObject as Exception, e.ToString());   MessageBox.Show(str, "系统错误", MessageBoxButtons.OK, MessageBoxIcon.Error);   //Log.Write(str);  }  ///   /// 生成自定义异常消息  ///   /// 异常对象  /// 备用异常消息:当ex为null时有效  /// 异常字符串文本  static string GetExceptionMsg(Exception ex, string backStr)  {   StringBuilder sbr = new StringBuilder();   sbr.AppendLine("****************************异常文本****************************");   sbr.AppendLine("【出现时间】:" + DateTime.Now.ToString());   if (ex != null)   {    sbr.AppendLine("【异常类型】:" + ex.GetType().Name);    sbr.AppendLine("【异常信息】:" + ex.Message);    sbr.AppendLine("【堆栈调用】:" + ex.StackTrace);    sbr.AppendLine("【异常对象】:" + ex.Source);    sbr.AppendLine("【触发方法】:" + ex.TargetSite);   }   else   {    sbr.AppendLine("【未处理异常】:" + backStr);   }   sbr.AppendLine("***************************************************************");   return sbr.ToString();  } } }
C# WinForm捕获全局异常
文章转载:http://www.shaoqun.com/a/464434.html