6

C#アプリケーションがUEに遭遇するたびに、デフォルトのWindowsフォーム未処理-例外ダイアログを取得したい。vs 2005では、次のようにapp.confでjitデバッグをオフにします。

<configuration>
   <system.windows.forms jitDebugging="false" />
<configuration>

アプリケーションは正しく動作し、WindowsフォームUEのデフォルトのダイアログを表示し、[続行]、[終了]、[コールスタック]などが表示されます。

ただし、vs 2008では、同じマシンまたは異なるマシンで、jitを無効にしても、[デバッグ]、[レポートの送信]、および[送信しない]ボタンのあるデフォルトの.NET未処理-例外ダイアログが表示されます。

vs 2008アプリをvs2005で作成したアプリのように動作させて、WindowsフォームUEダイアログボックスを表示するにはどうすればよいですか?

使用をお勧めしません

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

vs 2005プロジェクトでカスタムハンドラーを使用しないという理由だけで、vs 2008で使用するのはなぜですか?この仕事にCLRをさせたい。

どんな助けでも大歓迎です

4

2 に答える 2

15

あなたはさまざまな例外処理機能について話している。[終了]ボタンと[続行]ボタンに表示されるThreadExceptionDialogは、 Application.ThreadExceptionイベントによってトリガーされます。これは、Windowsメッセージに応答して実行されるイベントハンドラーが例外をスローしたときに、UIスレッドで例外が発生した場合にのみ表示されます。ただし、ワーカースレッドで例外が発生すると、AppDomain.UnhandledExceptionを介してプログラムが爆破されます。

後者を処理することはできません。プログラムは停止しており、続行できません。ThreadExceptionDialogを表示することは無意味です。

Application.SetUnhandledExceptionMode()を呼び出してThreadExceptionイベントを無効にすることで、プログラムを一貫して爆弾にすることができます。これで、未処理の例外がすべてAppDomain.UnhandledExceptionをトリガーし、プログラムを終了します。それはおそらくあなたが望むものではありませんが、賢明な選択です。

また、デバッガーを使用してプログラムを実行すると、ThreadExceptionイベントが無効になることに注意してください。これがおそらくVS2008で違いが見られる理由です。それ以外の点では変更はありません。

于 2010-04-13T12:21:17.073 に答える
0

ハンス・パッサントによる答えは賢明なようです。ただし、望まないと言っても、アプリケーションが予期せずクラッシュしたときに何が起こるかを確実に判断するために、ハンドラーをオンにすることをお勧めします。AppDomain.CurrentDomain.UnhandledException

于 2010-04-13T12:35:26.380 に答える