[C#]顯示未處理的例外錯誤
程式難免會有Bug,在可預期下使用try catch,能將可能發生的錯誤解決掉,並通知使用者,如
- 開啟檔案失敗
- 磁碟空間不足
但難免還是會有未處理到的例外,因此可以這麼做:
在Program.cs中:
[STAThread]
static void Main()
{
AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(CurrentDomain_UnhandledException);
Application.ThreadException += new System.Threading.ThreadExceptionEventHandler(Application_ThreadException);
}
2. 加入:
static void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e)
{
try
{
Exception ex = (Exception)e.ExceptionObject;
MessageBox.Show(string.Format("系統發生未處理的錯誤!\n\n{0}{1}", ex.Message, ex.StackTrace), "系統錯誤", MessageBoxButtons.OK, MessageBoxIcon.Stop);
}
finally
{
Application.Exit();
}
}
3. 加入:
static void Application_ThreadException(object sender, System.Threading.ThreadExceptionEventArgs e)
{
DialogResult result = DialogResult.Abort;
try
{
result = MessageBox.Show(string.Format("系統發生未處理的錯誤!\n\n{0}{1}", e.Exception.Message, e.Exception.StackTrace), "系統錯誤", MessageBoxButtons.AbortRetryIgnore, MessageBoxIcon.Stop);
}
finally
{
if (result == DialogResult.Abort)
{
Application.Exit();
}
}
}
此後,當使用者發生exception時,便會提示錯誤訊息;這個時候,就可以把exception的訊息傳到您的Email或是寫到DB中,這樣就容易Debug了!另外,當您自己在Debug模式中,將不會跳出這個MessageBox,而會停留在錯誤的程式碼中,讓您在開發程式時,可以知道錯在哪裡。