我有一个 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 或数据库异常。如果像 Stack Overflow 一样出现“严重”异常,我会简单地通知用户并终止应用程序。不过,我仍然需要找到一种方法来阻止应用程序因非严重异常而崩溃。