2016-07-05 25 views
-4

我想在我的Windows應用程序解決方案中編寫一個窗體,該窗體在引發任何異常時捕獲。我不想顯示那個醜陋的錯誤頁面,而是希望它向用戶顯示我定義的頁面。我該怎麼辦?如何編寫能捕獲所有錯誤的表單?

感謝您提前回答。

+0

我什麼都找不到。 – user6553558

+0

看看這裏https://msdn.microsoft.com/de-de/library/ms157905(v=vs.110).aspx但是這隻會在代碼中捕獲未處理的異常。未處理的異常是您的應用程序可能發生的最糟糕的事情,因爲它通常會終止它(崩潰)。請嘗試在'try catch finally'塊中處理可能的異常。 –

+7

您對C#中錯誤處理的工作原理有了大致瞭解嗎? –

回答

0

值得注意的是,下面的內容並不代替您的應用領域中的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 
} 
+1

提到這可能很有價值 - 當您仍在開發應用程序時,這可能會適得其反。如果在正常使用應用程序期間發生異常,這不是一個有效的解決方案。相反,在'try..catch'塊中包含可能容易出錯的代碼段。 – Ares