zoukankan      html  css  js  c++  java
  • WinForm 捕获异常 Application.ThreadException + AppDomain.CurrentDomain.UnhandledException

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

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

    复制代码
    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 { }
            }
        }
    复制代码

    这里有一个需要注意的地方,如下代码 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

  • 相关阅读:
    Splay 区间操作(二)
    P1351 联合权值
    Splay 区间操作
    P1801 黑匣子_NOI导刊2010提高(06)
    P3620 [APIO/CTSC 2007]数据备份
    T25990 [Wind Festival]Running In The Sky
    P1484 种树
    P4177 [CEOI2008]order
    题解 P2762 【太空飞行计划问题】
    dalao&话
  • 原文地址:https://www.cnblogs.com/liujianshe1990-/p/14536365.html
Copyright © 2011-2022 走看看