私の経験から、アプリケーションunhandled exception
内のにより、例外などを説明するダイアログ ボックスが表示される場合があります。.NET
- このようなダイアログ ボックスを完全に非表示にする方法はありますか?
- に関してのみダイアログ ボックスを非表示にすることは可能でしょう
Background Thread
か?
私の経験から、アプリケーションunhandled exception
内のにより、例外などを説明するダイアログ ボックスが表示される場合があります。.NET
Background Thread
か?はい、可能ですが、アプリケーションにとってそれが何を意味するのかをよく考える必要があります。
未処理の例外が発生した場合、アプリケーションが予期しない/未定義の状態になっている可能性があり、アプリケーションをクラッシュさせる方が理にかなっている可能性があります。代わりに、UIに一貫性がないか、フリーズするか、さらに悪い場合があります。
そうは言っても、WPF、WinForms、コンソールアプリ、ASP .NET、またはその他のものを使用しているかどうかはわかりません。使用しているテクノロジーを教えてください。ただし、一般的には、例外を抑制するだけのグローバル例外ハンドラーを接続できるはずです。
バックグラウンドスレッド部分については、スレッド関数をtrycatchブロックでラップするだけです。
未処理の例外は実際にプロセスを終了します。それがユーザーにどのように表示されるかは、Windowsによって異なります。たとえば、デバッガーがインストールされている場合は、プロセスをデバッグできるダイアログボックスが表示されます。これは、アプリケーション内から制御するものではありません。
ただし、アプリケーションがWindowsフォームアプリケーションの場合、.NET Frameworkは未処理の例外のハンドラーを設定し、例外に関する情報を含むダイアログボックスを開いて、プロセスを続行できるようにします。それがあなたが参照しているダイアログボックスだと思います。
この動作を回避するための最善のアプローチは、try-catchブロックを使用して、実際に例外をキャッチして処理することです。もちろん、例外をキャッチして完全に無視することは一般的に悪い考えであり、アプリケーションのバグを隠す可能性があります。
メソッドで気付かなかった例外をWindowsフォームが処理する方法をカスタマイズできます Application.SetUnhandledExceptionMode
。
抑制したい例外ダイアログによってブロックされている自動化テストがあるため、この質問に出くわしました。この問題のタイトルは、このケースの同様のスタックオーバーフローの質問よりも優れているため、Google は私をここに送ります。ただし、質問の本文と回答は、よりプログラム的なアプローチに向けられています。
投稿のタイトルを考えると、ソース コードを変更せずに問題を解決する回答を提供するのが妥当と思われます。
DontShowUI
最終的に、レジストリのキーを に設定することで、例外ダイアログを抑制することができました1
。この修正と、さまざまな代替手段については、以下で詳しく説明しています。