WinForm 捕获异常 Application.ThreadException + AppDomain.CurrentDomain.UnhandledException

  • A+
所属分类:.NET技术
摘要

 WinForm程序的全局错误处理可以在Program文件中设置处理事件,如下:这里有一个需要注意的地方,如下代码 Application.Run(new MainForm()); 这里只能执行一次 Application.Run代码,如果你像下面这样写代码的话:

WinForm 捕获未处理的异常,可以使用Application.ThreadException 和AppDomain.CurrentDomain.UnhandledException事件

 WinForm程序的全局错误处理可以在Program文件中设置处理事件,如下:

WinForm 捕获异常 Application.ThreadException + AppDomain.CurrentDomain.UnhandledException
static class Program     {                 /// <summary>         /// 应用程序的主入口点。         /// </summary>         [STAThread]         static void Main()         {                        Application.ThreadException += Application_ThreadException;             Application.SetUnhandledExceptionMode(UnhandledExceptionMode.CatchException);             AppDomain.CurrentDomain.UnhandledException += CurrentDomain_UnhandledException;             Application.EnableVisualStyles();             Application.SetCompatibleTextRenderingDefault(false);             Application.Run(new MainForm());         }          /// <summary>         /// 处理应用程序域内的未处理异常(非UI线程异常)         /// </summary>         /// <param name="sender"></param>         /// <param name="e"></param>         static void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e)         {                        try             {                 Exception ex = e.ExceptionObject as Exception;                 MessageBox.Show(ex.Exception.Message);             }             catch { }         }          /// <summary>         /// 处理应用程序的未处理异常(UI线程异常)         /// </summary>         /// <param name="sender"></param>         /// <param name="e"></param>         static void Application_ThreadException(object sender, ThreadExceptionEventArgs e)         {             try             {                               MessageBox.Show(e.Exception.Message);             }             catch { }         }     }
WinForm 捕获异常 Application.ThreadException + AppDomain.CurrentDomain.UnhandledException

这里有一个需要注意的地方,如下代码 Application.Run(new MainForm()); 这里只能执行一次 Application.Run代码,如果你像下面这样写代码的话:

Application.Run(new Form1()); Application.Run(new Form2());

那么如果在Form2出现未处理的异常(UI异常或是非UI异常),上面的异常处理程序就无法捕获了。 

 

出处:https://www.cnblogs.com/bruceleeliya/archive/2013/01/12/2857681.html

WinForm 捕获异常 Application.ThreadException + AppDomain.CurrentDomain.UnhandledException
static class Program     {                 /// <summary>         /// 应用程序的主入口点。         /// </summary>         [STAThread]         static void Main()         {                        Application.ThreadException += Application_ThreadException;             Application.SetUnhandledExceptionMode(UnhandledExceptionMode.CatchException);             AppDomain.CurrentDomain.UnhandledException += CurrentDomain_UnhandledException;             Application.EnableVisualStyles();             Application.SetCompatibleTextRenderingDefault(false);             Application.Run(new MainForm());         }          /// <summary>         /// 处理应用程序域内的未处理异常(非UI线程异常)         /// </summary>         /// <param name="sender"></param>         /// <param name="e"></param>         static void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e)         {                        try             {                 Exception ex = e.ExceptionObject as Exception;                 MessageBox.Show(ex.Exception.Message);             }             catch { }         }          /// <summary>         /// 处理应用程序的未处理异常(UI线程异常)         /// </summary>         /// <param name="sender"></param>         /// <param name="e"></param>         static void Application_ThreadException(object sender, ThreadExceptionEventArgs e)         {             try             {                               MessageBox.Show(e.Exception.Message);             }             catch { }         }     }
WinForm 捕获异常 Application.ThreadException + AppDomain.CurrentDomain.UnhandledException

这里有一个需要注意的地方,如下代码 Application.Run(new MainForm()); 这里只能执行一次 Application.Run代码,如果你像下面这样写代码的话:

Application.Run(new Form1()); Application.Run(new Form2());

那么如果在Form2出现未处理的异常(UI异常或是非UI异常),上面的异常处理程序就无法捕获了。