WinForm 处理未处理的异常 Application.ThreadException + AppDomain.CurrentDomain.UnhandledException

来源:互联网 发布:淘宝美工接单平台 编辑:程序博客网 时间:2024/04/27 18:29
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 SplashScreenForm());Application.Run(new MainForm());

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

0 0
原创粉丝点击