フォーム、クラス、基本クラスなどを持つ複数のプロジェクトで構成される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、またはDatabaseExceptionsなどになります。Stack Overflowのように「重大な」例外が発生した場合は、ユーザーに通知してアプリを強制終了します。ただし、重大ではない例外でアプリがクラッシュしないようにする方法を見つける必要があります。