zoukankan      html  css  js  c++  java
  • WinForm程序中未处理异常的解决方法(转)

    在这里我们将讨论的是WinForm程序中未处理异常的解决方法,51CTO向您推荐《WinForm应用与开发教程》,希望能对您了解WinForm有所帮助。

    //--tip

    //----

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

    错误提示 

    按钮事件为:

    1. private void button1_Click(object sender, EventArgs e){  
    2.         throw new Exception();  

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

    错误窗口

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

    1. static class Program  
    2.     {  
    3.         /// <summary>  
    4.         /// The main entry point for the application.  
    5.         /// </summary>  
    6.         [STAThread]  
    7.         static void Main()  
    8.         {  
    9.  Application.ThreadException += 
    10. new System.Threading.ThreadExceptionEventHandler(Application_ThreadException);  
    11.  AppDomain.CurrentDomain.UnhandledException += 
    12. new UnhandledExceptionEventHandler(CurrentDomain_UnhandledException);  
    13.               
    14.             Application.EnableVisualStyles();  
    15.             Application.SetCompatibleTextRenderingDefault(false);  
    16.             Application.Run(new Form1());  
    17.         }          
    18.  
    19. static void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e)  
    20.         {  
    21.             MessageBox.Show("抱歉,您的操作没有能够完成,请再试一次或者联系软件提供商");  
    22.             LogUnhandledException(e.ExceptionObject);  
    23.         }  
    24.  
    25. static void Application_ThreadException(object sender, System.Threading.ThreadExceptionEventArgs e)  
    26.         {  
    27.             MessageBox.Show("抱歉,您的操作没有能够完成,请再试一次或者联系软件提供商");  
    28.             LogUnhandledException(e.Exception);  
    29.         }  
    30.  
    31.         static void LogUnhandledException(object exceptionobj)  
    32.         {  
    33.             //Log the exception here or report it to developer  
    34.         }  
    35.     } 

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

    运行结果

  • 相关阅读:
    razor在App_Code中使用ActionLink无效的解决方案
    科技的进步会给人带来幸福么?
    C6000系列之C6455 DSP的EMIFA接口
    C6000系列之C6455DSP的GPIO模块
    C语言文件操作与例子
    C语言中fscanf函数读取double型浮点数的问题
    MATLAB读取CCS保存的数据
    CCS 3.3 操作C函数读写文件
    复数矩阵乘法C语言实现
    C6000系列之C6455DSP的中断系统
  • 原文地址:https://www.cnblogs.com/rainbowzc/p/1858229.html
Copyright © 2011-2022 走看看