我问的问题很简单,但我确信我在这里遗漏了一些东西:D
我的App.xaml.cs文件中有以下方法:
private void Application_UnhandledException(object sender, ApplicationUnhandledExceptionEventArgs e)
{
MessageBox.Show("An error occurred!", ":(", MessageBoxButton.OK);
e.Handled = true;
App.Current.Terminate;
}
并且在App()方法中添加了eventHandler:
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 :(得分:1)
您的消息框未显示,因为它之后会关闭应用程序。
如果您想要停止此行为,则需要以下代码:
e.Handled = true;
然而,如上所述,继续执行应用程序可能会导致更多问题。因此,我只会将此用于收集崩溃信息的情况,可能会向用户道歉,然后使用App.Current.Terminate();
答案 1 :(得分:0)
在Musters链接的documentation中说明了以下内容:
通常在触发UnhandledException事件后触发Windows 运行时终止应用程序,因为异常未处理。该 应用程序代码对此有一些控制:如果是UnhandledException事件 handler将事件参数的Handled属性设置为true,然后 在大多数情况下,应用程序不会被终止。但是,这样做 由于以下几个原因,不建议例行:
•通常,UnhandledException事件处理程序没有足够的信息 知道在例外是否安全后继续。部分内容 应用程序代码或Windows运行时可能不一致 状态,如果应用程序继续,可能导致后续失败 运行它的代码。
•Windows运行时考虑异常 在某些操作中遇到不可恢复的,因为 Windows运行时本身将处于不一致的状态 这些例外。对于此类异常,即使出现UnhandledException 事件处理程序设置Handled为true,应用程序仍将被终止。
•导航期间发生的错误可能会导致状态 没有任何东西作为内容加载,也没有任何东西可以指示给用户 该应用仍在运行。