我有一個關於異常處理的問題。防止未處理的異常停止應用程序
爲了防止 「[YourProgram]已停止工作」 Windows對話框,通常我趕上甚至未處理的異常,這種方式:
在App.xaml.cs:
protected override void OnStartup(StartupEventArgs e)
{
Application.Current.DispatcherUnhandledException += ProcessDispatcherException;
AppDomain.CurrentDomain.UnhandledException += ProcessUnhandledException;
// Blah blah blah... Performs a lot of loading operations...
mainWindow.Show();
}
然後
private void ProcessUnhandledException(object o, UnhandledExceptionEventArgs e)
{
logException("An unhandled exception has been thrown\n"+(e.ExceptionObject as Exception).ToString(), e.ExceptionObject as Exception);
Application.Current.Shutdown();
}
好吧,我沒有Windows對話框。現在理想情況下,我想阻止這種強制關閉場景。我在這裏開發的應用程序的啓動時間對於最輕的用戶來說持續大約1分鐘(其中大多數用戶需要等待2到3分鐘才能啓動它,它必須加載非常大且複雜的數據參考),因此重新啓動它可能會造成麻煩
我想知道關於這種情況的「最佳做法」。我正在考慮在處理程序中重新創建一個新窗口,並重新顯示它,因此只有用戶界面將重新初始化爲啓動狀態,沒有其他參考將被加載,保存2-3分鐘。任何其他建議?
哦,當然,這是「不應該達到的極端緊急情況」,但不幸的是,這主要是由於我們依賴於其他公司管理的其他系統,而我沒有任何控制或有權投訴(是的,國際公司可以吸的某個時候),並且它不嘗試/開捕代碼:(
謝謝!
你怎麼能確定只是創建一個新的窗口將工作?由於存在未處理的異常,您實際上並不知道程序其餘部分的狀態。這可能很好,也可能不會。只是在它上面打開一個新窗口就是在尋求麻煩。 – stijn
你能展示一些try catch塊無法捕捉的代碼嗎?我想不出任何... –
閱讀此: http://stackoverflow.com/questions/7152354/which-exceptions-shouldnt-i-catch/7152374#7152374 –