0

main()メソッドがtry ... catch句で保護されているにもかかわらず、.NETプロセスまたはスレッドが終了する理由の完全なリストを収集しようとしています。

そのような理由の1つは、Thread.Abort()です(Thread.ResetAbortを呼び出さない限り)。もっと理由を知っていますか?

4

5 に答える 5

4

StackOverflowExceptionをコードで処理することはできません。

StackOverflowExceptionは通常、通常のスタックサイズ(1MB)を超えるまでコールスタックを拡張できる無限ループがある場合に発生します。

回復できない例外が他にもあります。ExecutionEngineExceptionはその1つのようです。

于 2009-01-13T09:12:11.283 に答える
1

C / C ++とは異なり、main()はアプリケーション全体ではありません。したがって、main()内のすべてのコードをtry / catchブロックで囲んでも、そのコードによって生成されたすべての例外をキャッチすることはできません。

ただし、Application.ThreadExceptionイベントをリッスンすることで、アプリケーション全体によってスローされた未処理の例外を処理する関数をアタッチできます。これは、コードによって作成されたかどうかに関係なく、アプリケーション内の任意のスレッドからの例外をキャッチするのに役立ちます。

たとえば、コードが外部のアンマネージDLLのコードを呼び出す場合があります。そのコードはそれ自体のスレッドを実行する可能性があり、非同期で失敗して例外がスローされる可能性があります。その例外は、アプリケーションであるプロセスに属しますが、コードには属しません。また、キャッチされない場合、プログラムが予期せず終了します。

于 2009-01-13T09:15:59.450 に答える
0

スレッドで未処理の例外が発生し、スレッドを強制終了する可能性があります。メインスレッドにtrycatch句があると、実行中の別のスレッドからの例外がキャッチされません。

編集:共有フィールドの読み取り/書き込みにおけるいくつかの同時アクセス

于 2009-01-13T09:06:32.137 に答える
0

ネットワーク接続がタイムアウトしました。

停電。

問題のプロセスを強制終了するユーザー。

于 2009-01-13T09:07:26.423 に答える
0

AppDomainのアンロード

于 2009-01-13T09:24:43.813 に答える