2

未処理の例外の後に実行されているアプリケーションに次のコードがあります。

AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(CurrentDomain_UnhandledException);

static void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e)
        {
            var exception = e.ExceptionObject as Exception;
            if (exception != null) MessageBox.Show(exception.Message + " - " + exception.StackTrace);
        }

しかし、未処理の例外をキャッチしても、Windows モバイル アプリケーションは閉じます。未処理の例外をキャッチしたときにアプリケーションを閉じないようにする方法。アプリを閉じたくありません。このシナリオでログインフォームを開くか、アプリを閉じない何かを開きたいです。

だから私が欲しいのは、ネットワークがダウンしているような未処理の例外からアプリケーションを閉じるのを防ぐことです...

すべてのコードで try catch を使用することはできません....

ネットワークがダウンしている場合やその他の未処理の例外が発生した場合にアプリを閉じないようにする方法はありますか?

4

5 に答える 5

6

あなたはそうしない。AppDomain の未処理の例外が発生すると、アプリは安定した状態ではなくなります。正確にはどこに再開しますか?その時点に到達した場合、唯一の選択肢は、正当な理由により、終了することです。アプリが正常に動作するように再度実行するようにスケジュールを設定することもできますが、例外をソースで実際に処理し、例外が UnhandledException にならないようにすることをお勧めします。

于 2011-10-19T13:22:41.553 に答える
4

app.config に次の要素を追加します

<runtime>
  <!-- the following setting prevents the host from closing when an unhandled exception is thrown -->
  <legacyUnhandledExceptionPolicy enabled="1" />
</runtime>
于 2013-03-11T21:12:12.333 に答える
2

try...catch例外が発生する可能性のあるすべての状況で、例外を使用して処理する必要があります。(Java のような言語では、呼び出された関数がスローする可能性のあるすべての例外をキャッチするか、この特定の関数がそれをキャッチしないことを明示的に宣言するまで、コードをコンパイルすることさえできません。

いくつかの悪い状況を使用するケースを最小限に抑えたいtry...catch場合は、必要な条件が満たされているかどうかをテストすることで防ぐことができるため、特定の例外をスローすることが知られている関数を呼び出すことさえありません。好きなように

if (myByteArray != null)
{
    myIPAddress = new IPAddress(myByteArray);
}

この方法では、IPAddressコンストラクターは . をスローしないためArgumentNullExceptionです。

ただし、ほとんどの場合、特にネットワークでは、トランザクションの途中でケーブルが切断されるか、信号が失われるか、データベース サーバーがクラッシュするかなどを予測できないため、これを行うことはできません。 . try...catchそのため、ネットワークに接続したり、接続にデータを送信したり、接続からデータを受信したりするたびに行う必要があります。

于 2011-10-19T14:35:49.217 に答える
1

AppDomain.CurrentDomain.UnhandledExceptionは、任意のスレッドで未処理の例外が発生すると発生しますが、CLR 2.0 以降、CLR はイベント ハンドラーの完了後にアプリケーションを強制的にシャットダウンします。ただし、アプリケーション構成ファイルに以下を追加することで、シャットダウンを防ぐことができます。

<configuration>
  <runtime>
    <legacyUnhandledExceptionPolicy enabled="1" />
  </runtime>
</configuration>
于 2015-04-22T06:40:56.640 に答える
0

Application.ThreadExceptionを使用する必要があると思いますApplication.ThreadException をサブスクライブすると、未処理の例外がUnhandledExceptionにヒットせず、アプリは実行され続けます。

于 2011-10-18T07:02:07.797 に答える