WinForm 捕獲未處理的例外,可以使用Application.ThreadException 和AppDomain.CurrentDomain.UnhandledException事件
WinForm程式的全域錯誤處理可以在Program檔案中設定處理事件,如下:
static class Program
{
/// <summary>
/// 應用程式的主入口點,
/// </summary>
[STAThread]
static void Main()
{
Application.ThreadException += Application_ThreadException;
Application.SetUnhandledExceptionMode(UnhandledExceptionMode.CatchException);
AppDomain.CurrentDomain.UnhandledException += CurrentDomain_UnhandledException;
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new MainForm());
}
/// <summary>
/// 處理應用程式域內的未處理例外(非UI執行緒例外)
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
static void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e)
{
try
{
Exception ex = e.ExceptionObject as Exception;
MessageBox.Show(ex.Exception.Message);
}
catch { }
}
/// <summary>
/// 處理應用程式的未處理例外(UI執行緒例外)
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
static void Application_ThreadException(object sender, ThreadExceptionEventArgs e)
{
try
{
MessageBox.Show(e.Exception.Message);
}
catch { }
}
}
這里有一個需要注意的地方,如下代碼 Application.Run(new MainForm()); 這里只能執行一次 Application.Run代碼,如果你像下面這樣寫代碼的話:
Application.Run(new Form1()); Application.Run(new Form2());
那么如果在Form2出現未處理的例外(UI例外或是非UI例外),上面的例外處理程式就無法捕獲了,
出處:https://www.cnblogs.com/bruceleeliya/archive/2013/01/12/2857681.html
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/270459.html
標籤:WinForm
