.NET - "catch all exceptions handler "を実装するのに最適な方法は何ですか?
質問
if all else fails catch it"を持つベストな方法は何なのか、疑問に思っています。
アプリケーションの中でできるだけ多くの例外を処理しているわけですが、それでもバグが発生することは避けられません。 しかし、それでもバグが発生する可能性があります。 そのため、処理されなかった例外をすべてキャッチして、情報を収集し、データベースに保存したり データベースに保存したり、ウェブサービスに送信したりすることができます。
AppDomain.CurrentDomain.UnhandledExceptionイベントはすべてを捕らえるのでしょうか? アプリケーションがマルチスレッドであってもですか?
補足: Windows Vista では、あらゆるアプリケーションがクラッシュ後に自身を回復できるようなネイティブ API 関数が公開されています。 名前が思いつきません......しかし、私たちのユーザーの多くは、この関数を使用しないことを望んでいます。 しかし、私たちのユーザーの多くはまだ Windows XP を使用しているので、それを使用することはできません。
どのように解決するのですか?
AppDomain の UnhandledException の動作で遊んでみたところです。 (これは、未処理の例外が登録される最後の段階です)
はい、イベント ハンドラを処理した後、アプリケーションは終了し、厄介な "... program stopped working dialog" が表示されます。
:) あなたは 今も はそれを避けることができます。
チェックしてみてください。
class Program
{
void Run()
{
AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(CurrentDomain_UnhandledException);
Console.WriteLine("Press enter to exit.");
do
{
(new Thread(delegate()
{
throw new ArgumentException("ha-ha");
})).Start();
} while (Console.ReadLine().Trim().ToLowerInvariant() == "x");
Console.WriteLine("last good-bye");
}
int r = 0;
void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e)
{
Interlocked.Increment(ref r);
Console.WriteLine("handled. {0}", r);
Console.WriteLine("Terminating " + e.IsTerminating.ToString());
Thread.CurrentThread.IsBackground = true;
Thread.CurrentThread.Name = "Dead thread";
while (true)
Thread.Sleep(TimeSpan.FromHours(1));
//Process.GetCurrentProcess().Kill();
}
static void Main(string[] args)
{
Console.WriteLine("...");
(new Program()).Run();
}
}
P.S. Application.ThreadException(WinForms)やDispatcherUnhandledException(WPF)の未処理は上位で処理するようにしてください。
関連
-
[解決済み】WebForms UnobtrusiveValidationModeは、jqueryのScriptResourceMappingを必要とする
-
[解決済み】Unity3DでOnTriggerEnterが動作しない件
-
[解決済み】非静的メソッドはターゲットを必要とする
-
[解決済み】Nullableオブジェクトは値を持たなければならない?
-
[解決済み] C#のオートプロパティに初期値を与える最良の方法は何ですか?
-
[解決済み] .NETにおけるstructとclassの違いは何ですか?
-
[解決済み] 複数のJava例外を同じcatch節でキャッチすることはできますか?
-
[解決済み] .NET Core、.NET Framework、Xamarinの違いとは?
-
[解決済み】.NETの例外をキャッチして再スローするためのベストプラクティス
-
[解決済み】WPFアプリケーションで例外をグローバルにキャッチする?
最新
-
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#
-
[解決済み】指定されたキャストが有効でない?
-
[解決済み] エンティティタイプ ApplicationUser は、現在のコンテキストのモデルの一部ではありません。
-
[解決済み] メンバー '<メンバー名>' にインスタンス参照でアクセスできない
-
[解決済み】C#で四捨五入する方法
-
[解決済み】WPFでXamlファイルにコメントを追加する方法は?
-
[解決済み】Socket.Selectがエラー "An operation was attempted on something that is not a socket" を返す。
-
[解決済み】「...は'型'であり、与えられたコンテキストでは有効ではありません」を解決するにはどうすればよいですか?(C#)
-
[解決済み】「namespace」なのに「type」のように使われる。
-
[解決済み】ユーザー設定値を別のユーザー設定値で設定する