體面地處理程序的未捕獲異常
經常有客戶抱怨程序遇到錯誤的時候程序就退出了,甚至來不及保存窗體的輸入數據,如果是普通的搜索界面也就罷了,但如果客戶是呼叫中心,問題就嚴重了.按道理,我們的程序員應該處理所有的異常,但有事實上做到的很難,因為出乎意料的情況太多了.
在這篇文章,我給大家介紹一下我的處理方法。
首先介紹相應的C#相關知識:
System.Windows.Forms.Application類
提供 static 方法和屬性以管理應用程序,例如啟動和停止應用程序、處理 Windows 消息的方法和獲取應用程序信息的屬性。
System.Windows.Forms.Application.ThreadException 事件
在發生未捕獲線程異常時發生。
System.Windows.Forms.Application.SetUnhandledExceptionMode()方法
指示應用程序如何響應未處理的異常。
-
SetUnhandledExceptionMode(UnhandledExceptionMode)
指示應用程序如何響應未處理的異常。
-
SetUnhandledExceptionMode(UnhandledExceptionMode, Boolean)
指示應用程序如何響應未處理的異常,同時可選擇應用特定于線程的行為。
System.Windows.Forms.UnhandledExceptionMode枚舉
定義 Windows 窗體應用程序應在何處發送未處理的異常。
public enum UnhandledExceptionMode
{
Automatic, //將所有異常都傳送到 ThreadException 處理程序,除非應用程序的配置文件指定了其他位置。
ThrowException, //從不將異常傳送到 ThreadException 處理程序。忽略應用程序配置文件。
CatchException //始終將異常傳送到 ThreadException 處理程序。忽略應用程序配置文件。
}
以下是我的實現示例:
/// <summary>
/// 應用程序的主入口點。
/// </summary>
[STAThread]
static void Main()
{
//應用程序的主入口點添加ThreadException的事件處理。
Application.ThreadException += new ThreadExceptionEventHandler(Application_ThreadException);
}
static void Application_ThreadException(object sender, ThreadExceptionEventArgs e)
{
//作為示例,這里用消息框顯示異常的信息
MessageBox.Show(e.Exception.Message,"異常",MessageBoxButtons.OK,MessageBoxIcon.Error);
}


浙公網安備 33010602011771號