3

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

4

2 に答える 2

12

設定する必要があると思います

dispatcherUnhandledExceptionEventArgs.Handled = true;
于 2012-08-19T06:10:21.930 に答える
0

アプリケーションはどのような例外をキャッチしていますか?HandleProcessCorruptedStateExceptionsAttribute属性を設定しない限り、状態を変更する例外にUnhandledExceptionを使用しても機能しません。

From MSDN documentation:
AppDomain.UnhandledException Event

.NET Framework 4以降、イベントハンドラーがセキュリティ上重要であり、HandleProcessCorruptedStateExceptionsAttribute属性を持っていない限り、スタックオーバーフローやアクセス違反など、プロセスの状態を破壊する例外に対してこのイベントは発生しません。

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

于 2012-08-19T05:52:31.023 に答える