程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> 關於.NET >> 如何處理Windows Forms程序中未處理的異常

如何處理Windows Forms程序中未處理的異常

編輯:關於.NET

如果Windows Forms程序中有未被捕獲的異常,會導致程序崩潰並且給用戶造成不良的印象。例如下面的程序,模擬了一個未捕獲的異常:

按鈕事件為:

private void button1_Click(object sender, EventArgs e)

{
     throw new Exception();
}

點擊Exception 按鈕,會彈出如下默認窗口

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
     }
   }

此時運行該程序的結果如下:

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved