アプリケーションがハングして、アプリケーションの「未処理の例外」ダイアログではなく、デフォルトの「この問題についてマイクロソフトに連絡してください」ポップアップが表示されるという問題があります。
アプリケーション コードでは、Application.ThreadException と AppDomain.CurrentDomain.UnhandledException の両方が、エラー ログをディスクに書き込み、スクリーンショットをディスクに保存し、わかりやすいダイアログ ボックスを表示するメソッドにリダイレクトされます。
しかし、このエラーが発生すると、これら 3 つのことはいずれも起こりません。私が得るのは、イベントビューアでこれだけです:
EventType clr20e3、P1 myapp.exe、P2 4.0.0.0、P3 47d794d4、P4 mscorlib、P5 2.0.0.0、P6 471ebc5b、P7 15e5、P8 27、P9 system.argumentoutofrange、P10 NIL
アプリケーションが数時間実行された後にのみエラーが発生するように見えることを考えると、メモリ リークの問題ではないかと思います。「clr20e3」を少し検索しましたが、ASP.Net のものしか見つかりませんでした。私のアプリケーションは Windows Forms (.Net 2.0) exe で、C# と一部のアンマネージ C++ の両方でかなりの数のアセンブリを使用しています。
エラー処理メソッドのエラーである可能性もあると思います-いくつかの回答が示唆するように、エラーハンドラーの開始時にログを記録しようとするかもしれません(ただし、とにかくそれがほとんどの場合...)。
この問題を解決する助けがあれば、それが解決策であろうと、問題の根本原因を見つける方法の提案であろうと、大歓迎です。
更新: 元のバグの根本的な原因は、負のインデックス (system.argumentoutofrange) を持つ配列にアクセスすることでした。なぜこれがトラップされなかったのかは少し謎ですが、両方の例外が同じ処理コードに送信されたことを考えると、(たとえば) 両方が呼び出されてリソースをめぐって争うという状況がなかったのではないかと思います。 (たとえば、ログ ファイル)?
エラー処理コードで他の何よりも先に EventLog.WriteEntry を実行することで、これを証明することができました。エラー処理での再入力を防ぐフラグを追加したので、問題はないようです...