とてもシンプルなスレッドがあります。Threadオブジェクトが行うのは。だけですthrow new Exception();
。これを行った理由は、アプリケーションの別のスレッドで例外が発生した場合に何が起こるかをテストする必要があったためです。「実際の」実行時例外を使用してこれをテストしましたが、問題は同じです。
スレッドを呼び出す前に行うことは次のとおりです。
AppDomain.CurrentDomain.UnhandledException += CurrentDomainOnUnhandledException;
Application.Current.DispatcherUnhandledException += CurrentOnDispatcherUnhandledException;
//To handle exceptions in another thread
private void CurrentDomainOnUnhandledException(object sender, UnhandledExceptionEventArgs unhandledExceptionEventArgs)
{
//Do nothing ignore exception
}
//To handle all exceptions in main thread
private static void CurrentOnDispatcherUnhandledException(object sender, DispatcherUnhandledExceptionEventArgs dispatcherUnhandledExceptionEventArgs)
{
dispatcherUnhandledExceptionEventArgs.Handled = true;
}
このスレッドが例外をスローすると、最初は正常にヒットCurrentDomainOnUnhandledException
し、次にヒットしませんCurrentOnDispatcherUnhandledException
。直後にCurrentDomainOnUnhandledException
、スタックはスレッドに戻り、そこで例外をスローして再度スローし、同じ行を実行します。これをやめることはありません。基本的には無限ループであり、その理由がわかりません。
UnhandledExceptionEventArgsには、設定するプロパティがありません。つまり、例外を処理したので、これが問題の一部であると確信しています。
何が間違っているのか、このスレッドでこのUnhandledExceptionをキャッチし、スレッドに実行を継続させる(推奨)か、スレッドを中止/強制終了して(非推奨)、新しい例外行の実行を継続しないようにする方法。
私はこれをデバッグとリリースでテストしました(リリースのデバッグ情報がnoneに設定されていることを確認しました)。これは両方のバージョンで引き続き発生し、例外は何度も発生し続けます。
事前のおかげで、私は困惑していて、なぜそれが行われるのかわかりません。