2

我要問的東西是probabily很簡單,但我敢肯定,我在這裏的東西:d如何使用Application_UnhandledException來捕獲一般異常?

我在App.xaml.cs文件中的下列方法:

private void Application_UnhandledException(object sender, ApplicationUnhandledExceptionEventArgs e) 
{ 
    MessageBox.Show("An error occurred!", ":(", MessageBoxButton.OK); 
    e.Handled = true; 
    App.Current.Terminate; 
} 

而事件處理程序在應用程序中添加()方法:

public App() 
{ 
    UnhandledException += Application_UnhandledException; 

    //InitializeComponent() etc... 
} 

現在,我加了一對夫婦,在我在我的MainPage.xaml.cs中文件的方法之一產生IndexOutOfRange異常線,是這樣的:

int[] stuff = new int[3]; 
for (int i = 0; i < 4; i++) 
{ 
    stuff[i] = 0; 
} 

我不明白Application_UnhandledException方法是如何工作的,因爲當我嘗試運行它時,我在Visual Studio調試器中得到IndexOutOfRange異常,但之後應用程序崩潰,我沒有得到該消息框,所以Application_UnhandledException中的代碼根本不運行。 這是爲什麼?

有沒有辦法添加一個事件處理程序,觸發與我得到的任何異常? 我的意思是,用IndexOutOfRande,用KeyNotFound等等......

謝謝! :)

+0

當您將try/catch包裝在代碼中並在catch中重新拋出時會發生什麼例外。 – 2014-09-22 19:13:49

+0

什麼也沒有發生,我得到相同的IndexOutOfRange異常,並且Application_UnhandledException不會被觸發。 – Sergio0694 2014-09-22 19:52:57

+0

代碼是否包含在異步函數中? – 2014-09-22 20:44:31

回答

0

在此召集其鏈接的documentation說以下內容:

通常情況下,UnhandledException事件被觸發後,在Windows 運行時終止應用程序因爲異常是未處理的。 應用代碼對此有一些控制:如果UnhandledException事件 處理程序將事件參數的Handled屬性設置爲true,那麼在大多數情況下,該應用程序不會被終止。但是,這樣做 通常不建議有以下幾個原因:

•通常情況下,UnhandledException事件處理程序沒有足夠的信息來 知道是否異常後繼續上是安全的。 應用程序代碼或Windows運行時的部分可能處於不一致的 狀態,如果應用程序繼續運行其代碼,則可能導致後續失敗。

•Windows運行時認爲異常 某些操作是不可恢復的過程中遇到的,因爲 Windows運行時本身會在以下 這些例外不一致的狀態。對於這種例外,即使UnhandledException事件處理程序將Handled設置爲true,該應用程序仍將被終止。

•在導航過程中發生的錯誤可能會導致一個狀態,其中 沒有任何內容被加載,並且沒有任何內容向用戶 指示該應用程序仍在運行。

+0

如果您正在運行調試器,請確保您繼續執行應用程序,因爲UnhandledException事件不會被觸發,直到您收到來自Visual Studio調試器的初始通知後。 – 2014-09-26 20:15:22

1

您的消息框不顯示,因爲它關閉了應用程序之後。

在要停止這種行爲的情況下,你需要這行代碼:

e.Handled = true; 

但是如上所述,隨着應用程序繼續執行可能會導致更多的問題。所以我只會在收集崩潰信息的情況下使用它,也許向用戶道歉然後退出應用程序使用App.Current.Terminate();

+0

我在消息框後添加了,並且我還添加了App.Current.Terminate(),但它不起作用,問題是整個Application_UnhandledException方法不會被觸發。 我嘗試使用IndexOutOfRange異常和KeyNotFound異常,它不起作用。 我的意思是,是否有可能創建一個事件處理程序,觸發任何種類的異常,我可以得到? – Sergio0694 2014-09-23 14:49:24

+0

應該每次調用這個方法。你可以嘗試創建新的應用程序,並在這裏產生異常? – Filip 2014-09-23 15:32:54

+0

我試過,但我仍然得到同樣的東西:Visual Studio告訴我,我得到了一個IndexOutOfRange異常,但Application_UnhandledException方法不運行。 – Sergio0694 2014-09-23 15:55:12