zoukankan      html  css  js  c++  java
  • 如何处理Windows Forms程序中未处理的异常

    如果Windows Forms程序中有未被捕获的异常,会导致程序崩溃并且给用户造成不良的印象。例如下面的程序,模拟了一个未捕获的异常:

    clip_image002
    按钮事件为:

    private void button1_Click(object sender, EventArgs e)
    {
            throw new Exception();
    }

    点击Exception 按钮,会弹出如下默认窗口

    clip_image004

    Windows Forms提供了两个事件来处理未捕获的异常发生时的情况,分别是 Application.ThreadException和AppDomain.UnhandledException事件,前者用来处理UI线程中的异常,后者处理其他线程中的异常。要使程序使用自定义的事件来处理异常,可以使用如下代码:

    static class Program
        {
            /// <summary>
            /// The main entry point for the application.
            /// </summary>
            [STAThread]
            static void Main()
            {
                Application.ThreadException += new System.Threading.ThreadExceptionEventHandler(Application_ThreadException);
                AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(CurrentDomain_UnhandledException);
                
                Application.EnableVisualStyles();
                Application.SetCompatibleTextRenderingDefault(false);
                Application.Run(new Form1());
            }        
    
            static void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e)
            {
                MessageBox.Show("抱歉,您的操作没有能够完成,请再试一次或者联系软件提供商");
                LogUnhandledException(e.ExceptionObject);
            }
    
            static void Application_ThreadException(object sender, System.Threading.ThreadExceptionEventArgs e)
            {
                MessageBox.Show("抱歉,您的操作没有能够完成,请再试一次或者联系软件提供商");
                LogUnhandledException(e.Exception);
            }
    
            static void LogUnhandledException(object exceptionobj)
            {
                //Log the exception here or report it to developer
            }
        }

    此时运行该程序的结果如下:

    clip_image006

  • 相关阅读:
    词汇表处理脚本
    jLowNote又,我为什么要说又,有bug
    于是按照贴吧某同学的指教,把imageViewer里那个愚蠢的语句改了
    捉到Bug一只,jLowNote里的
    高产赛母猪
    我超喜欢Nimbus风格的!
    专注写记事本三十年
    秒秒钟食言
    别再打了,Java和Python,你们其实都是C
    电话本写完了,发个1.0吧
  • 原文地址:https://www.cnblogs.com/yinzixin/p/1631633.html
Copyright © 2011-2022 走看看