未处理的异常在被捕获后仍会使应用程序崩溃

问题描述 投票:3回答:2

我有一个WPF应用程序,其中包含具有表单,类,基类等的多个项目。

由于代码量很大,我想确保是否确实发生异常,因此我可以捕获它,通知用户并让应用程序继续运行而不会崩溃。我了解这样做的利弊。

在我具有的应用程序的App.xaml.cs中:

private void OnApplicationStartup(object sender, StartupEventArgs e)
{
    Application.Current.DispatcherUnhandledException += CurrentOnDispatcherUnhandledException;
    AppDomain.CurrentDomain.UnhandledException += CurrentDomainOnUnhandledException;
    Dispatcher.UnhandledException += DispatcherOnUnhandledException;
    UI.Views.Windows.MainWindow.Show();
}

private void DispatcherOnUnhandledException(object sender, DispatcherUnhandledExceptionEventArgs dispatcherUnhandledExceptionEventArgs)
{
    MessageBox.Show("TEST 3");
}

private void CurrentDomainOnUnhandledException(object sender, UnhandledExceptionEventArgs unhandledExceptionEventArgs)
{
    MessageBox.Show("TEST 2");
}

private void CurrentOnDispatcherUnhandledException(object sender, DispatcherUnhandledExceptionEventArgs dispatcherUnhandledExceptionEventArgs)
{
    MessageBox.Show("TEST 1");
}

如果在任何显示消息框的地方都发生异常,那很好,那么问题出在显示消息后,应用程序仍然崩溃。如果我在调试中运行该应用程序,Visual Studio将跳至发生异常的地方,如果继续,它将转到消息框。

我认为问题与此有关,但我不确定。有没有办法像我上面那样捕获异常,但同时又不会使应用程序崩溃?

谢谢

编辑进入UnhandledException部分的异常将是诸如NullReference,NotSupported或大多数数据库的数据库异常之类的东西。如果像堆栈溢出那样发生了“严重”异常,我将简单地通知用户并终止该应用程序。我仍然需要找到一种方法来阻止应用程序在非严重异常时崩溃。

wpf visual-studio-2010 c#-4.0 exception-handling unhandled-exception
2个回答
11
投票

我认为您需要设置

dispatcherUnhandledExceptionEventArgs.Handled = true;

0
投票

您的应用程序正在捕获哪种异常?除非您设置HandleProcessCorruptedStateExceptionsAttribute属性,否则将UnhandledException用于更改状态的异常将不起作用。

From MSDN documentation:
AppDomain.UnhandledException Event

从.NET Framework 4开始,除非破坏事件处理程序对安全性至关重要并且具有HandleProcessCorruptedStateExceptionsAttribute属性,否则不会破坏进程状态(例如堆栈溢出或访问冲突)的异常不会引发此事件。

http://msdn.microsoft.com/en-us/library/system.appdomain.unhandledexception.aspx

© www.soinside.com 2019 - 2024. All rights reserved.