我想在我的Windows應用程序解決方案中編寫一個窗體,該窗體在引發任何異常時捕獲。我不想顯示那個醜陋的錯誤頁面,而是希望它向用戶顯示我定義的頁面。我該怎麼辦?如何編寫能捕獲所有錯誤的表單?
感謝您提前回答。
我想在我的Windows應用程序解決方案中編寫一個窗體,該窗體在引發任何異常時捕獲。我不想顯示那個醜陋的錯誤頁面,而是希望它向用戶顯示我定義的頁面。我該怎麼辦?如何編寫能捕獲所有錯誤的表單?
感謝您提前回答。
值得注意的是,下面的內容並不代替您的應用領域中的try .. catch
邏輯。以下是不建議停止使用try ... catch
。下面只是一種處理意外異常的方法,並且在應用程序關閉之前顯示一些有用的消息(也可以使用stackTrace發送電子郵件給支持人員),而不是醜陋的Windows消息(應用程序XYZ停止工作)。
您需要註冊以處理所有未處理的異常(除定時器和輔助線程上的異常外)。 Program.cs
是個好地方:
static void Main()
{
AppDomain.CurrentDomain.UnhandledException += CurrentDomain_UnhandledException;
Application.ThreadException += Application_ThreadException;
Application.SetUnhandledExceptionMode(UnhandledExceptionMode.CatchException);
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Form1());
}
private static void Application_ThreadException(object sender, System.Threading.ThreadExceptionEventArgs e)
{
ShowCustomException(e.Exception);
}
private static void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e)
{
ShowCustomException(e.ExceptionObject as Exception);
}
private static void ShowCustomException(Exception ex)
{
// show your custom exception form
}
提到這可能很有價值 - 當您仍在開發應用程序時,這可能會適得其反。如果在正常使用應用程序期間發生異常,這不是一個有效的解決方案。相反,在'try..catch'塊中包含可能容易出錯的代碼段。 – Ares
我什麼都找不到。 – user6553558
看看這裏https://msdn.microsoft.com/de-de/library/ms157905(v=vs.110).aspx但是這隻會在代碼中捕獲未處理的異常。未處理的異常是您的應用程序可能發生的最糟糕的事情,因爲它通常會終止它(崩潰)。請嘗試在'try catch finally'塊中處理可能的異常。 –
您對C#中錯誤處理的工作原理有了大致瞭解嗎? –