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

  • 相关阅读:
    4. Validator校验器的五大核心组件,一个都不能少
    如何快速提高数据库查询效率
    linux系统简介
    echo命令
    Linux-->基本查找及vim使用
    jmeter.5.4.1
    Shell文本处理三剑客:grep、sed、awk
    Linux 下的dd命令使用详解
    Linux添加硬盘和挂载两个命令fdisk和mount的使用
    Linux系统常用命令速查手册
  • 原文地址:https://www.cnblogs.com/yinzixin/p/1631633.html
Copyright © 2011-2022 走看看