[解決済み] WinForms アプリケーションの '未処理' 例外をすべて捕捉するものを作るにはどうしたらいいですか?
2023-03-31 10:41:17
質問
これまでは
Application.Run
の中に
Program.cs
のエントリポイントに追加します。これは、デバッグモードではすべての例外を十分に捕捉しますが、デバッグモードなしでプログラムを実行すると、例外が処理されなくなります。処理されない例外ボックスが表示されます。
私はこのようなことが起こらないようにしたいのです。非デバッグ モードで実行するときに、すべての例外が捕捉されるようにしたいのです。プログラムには複数のスレッドがあり、それらからのすべての例外が同じハンドラによって捕捉されることが望ましいです; 私はDBに例外を記録したいです。これを行う方法について、どなたかアドバイスをお持ちですか?
どのように解決するのですか?
の例を見てみましょう。 ThreadException ドキュメント :
public static void Main(string[] args)
{
// Add the event handler for handling UI thread exceptions to the event.
Application.ThreadException += new
ThreadExceptionEventHandler(ErrorHandlerForm.Form1_UIThreadException);
// Set the unhandled exception mode to force all Windows Forms errors
// to go through our handler.
Application.SetUnhandledExceptionMode(UnhandledExceptionMode.CatchException);
// Add the event handler for handling non-UI thread exceptions to the event.
AppDomain.CurrentDomain.UnhandledException += new
UnhandledExceptionEventHandler(CurrentDomain_UnhandledException);
}
また、デバッグ時に例外をキャッチしないようにするのもよいでしょう。ややハック的ですが、そのためには上記のコードをラップして
if (!AppDomain.CurrentDomain.FriendlyName.EndsWith("vshost.exe")) { ... }
デバッグ時に例外をキャッチしないようにするため。
EDIT : デバッガ内部でアプリケーションが動作しているかどうかを確認するための代替方法で、ファイル名をチェックするよりもすっきりしています。
(moltenform、Kiquenet、Dougによるコメントを参照)
if(!System.Diagnostics.Debugger.IsAttached) { ... }
とは異なるデバッガを使用した場合の問題を回避することができます。
vshost.exe
.
関連
-
[解決済み】値をNULLにすることはできません。パラメータ名:source
-
[解決済み] 2つのリストを結合する
-
[解決済み】ファイルやアセンブリ、またはその依存関係の1つをロードできませんでした。
-
[解決済み] .NETコンソールアプリケーションでアプリケーションのパスを取得するにはどうすればよいですか?
-
[解決済み] スタックトレースとは何ですか、またアプリケーションのエラーをデバッグするためにスタックトレースをどのように使用できますか?
-
[解決済み] 数字しか入力できないテキストボックスの作り方を教えてください。
-
[解決済み] Windowsフォームアプリケーションで、アプリケーションの設定を保存するにはどうすればよいですか?
-
[解決済み] ASP.NET Core Web APIの例外処理
-
[解決済み】#if RELEASEは、C#の#if DEBUGのように動作するのでしょうか?
-
[解決済み] ASP.NET Web Apiで処理されない例外をすべてキャッチする
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】"出力タイプがクラスライブラリのプロジェクトは直接起動できない"
-
[解決済み] メンバー '<メンバー名>' にインスタンス参照でアクセスできない
-
[解決済み】C#で四捨五入する方法
-
[解決済み】非静的メソッドはターゲットを必要とする
-
[解決済み】ORA-01008: すべての変数がバインドされていません。これらはバインドされています。
-
[解決済み] 'IEnumerable<SelectListItem>' 型の ViewData アイテムで、キーが国であるものは存在しない。
-
[解決済み] UnityでOnCollisionEnterが呼ばれない
-
[解決済み】"指定されたパスのフォーマットはサポートされていません。"
-
VSでscanfエラーを恒久的に解決するには、ソースファイルを作成し、自動的に#define _CRT_SECURE_NO_WARNINGS 1を追加してください。
-
[解決済み】スレッド終了またはアプリケーションの要求により、I/O操作が中断されました。