これはprevious questionに関連しています。AppDomainの例外は常にアプリケーションを終了させますか?
ここで私が理解しようとしているのは、UI以外の例外が発生しない限り、UIスレッドの例外がアプリケーションを終了させることを防ぐ方法です。
参考のため、this exampleを参照してください。
最も重要なのは、エラー報告を送信するかどうかを尋ねるWindowsのダイアログボックスを表示せずに、プロセスを「サイレントに」終了することです。これは私のAppDomain UnhandledExceptionHandlerある
は:this answerのコメントに照らして
private static void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e)
{
try
{
// Maybe do some logging here if allowed
}
catch
{
}
// then just terminate the application
Application.Exit();
}
UPDATE
、私が最も重要な、私はそのメカニズムの詳細についてはしたいことを明確にしたいと思いますApplication.ThreadException
メカニズムを使用して、未処理の例外をキャッチする機会をUIスレッドに与えることができます。そして、そのような振る舞いが非UIスレッドで実装できるかどうか。
@Reedのための.NET JITデバッグダイアログを無効にする方法に非常に興味がある:「UIスレッドで未処理の例外が同じが発生します起こること。 " - 本当じゃない。テストアプリケーションを作成し、自分で試してみてください。 –
技術的には、「メインスレッドで未処理の例外」と言わなければなりません。 Windowsフォームは、メインスレッドの動作を変更する独自の例外処理ビヘイビアをUIスレッドに追加します(UIスレッドでは完全に実行されているため)。コンソールアプリケーションを作成して試してみると、どのスレッドが発生しても問題はないことがわかります。それらはすべてアプリケーションを解体します。 –
それから私は私の質問を再掲する必要があります:どのようにUIスレッドは一般的な例外処理の動作を達成するのですか?それは私が非UIスレッドの振る舞いとして再現できるものですか? –