この質問は少しthis question about exception handlingに関連しています。私がそこに見つけた回避策は、私自身のメッセージループを巻き込むことから成っています。あなた自身のメッセージループを転がして、どんな落とし穴?
だから私の主な方法は今基本的に次のようになります。
[STAThread]
static void Main() {
// this is needed so there'll actually an exception be thrown by
// Application.Run/Application.DoEvents, instead of the ThreadException
// event being raised.
Application.SetUnhandledExceptionMode(UnhandledExceptionMode.ThrowException);
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Form form = new MainForm();
form.Show();
// the loop is here to keep app running if non-fatal exception is caught.
do {
try {
Application.DoEvents();
Thread.Sleep(100);
}
catch (Exception ex) {
ExceptionHandler.ConsumeException(ex);
}
}
while (!form.IsDisposed);
}
私も思ったんだけど何を、は、より一般的な 「Application.Run(新しいMainFormをする(交換する安全な/まともな方法でこれです)); '、それが例外処理のために使用されているのか、それとも他のもののために使用されていようと、私はいつもApplication.Runを使うべきですか?テスト中だ別のアプリで
今同様のアプローチがロード(スプラッシュスクリーン)と例外処理の両方に使用される、と私はそれが(:-)まだ)トラブルを起こしているとは思わない
.NETではWaitMessageと同等の機能はないようですが、メッセージループのためだけにP/Invokeを使用すると少し関係しているようです。 また私は私の他の質問(この質問のリンクを参照)のための別の解決策を持っていないので、それはなぜ無意味なのですか? :p – Tobi
私を許してください。しかし、もしあなたがピンボケがあまりにも関与していると思えば、カスタムメッセージループを書くことについてもう一度考えるべきです。あなたの他の質問に関しては、いくつかのあいまいな理由が_unhandled_例外イベントで例外を処理したい場合、いくつかのハックの準備をしてください。 – ima
私の経験上、高レベルの例外処理は常に1つの大きなハックであり、できるだけ多くのことをやりたいのです。デバッグ/ログ出力の最も内側の例外を取得することはオプションではありません。すべてのイベントハンドラのtry catchブロックを貼り付けることもできません。 – Tobi