一般的に、我々は、クラッシュの原因の異常を避けるために、グローバルWPFキャプチャを追加しています。
Application.Current.DispatcherUnhandledException + = Current_DispatcherUnhandledException。 AppDomain.CurrentDomain.UnhandledException + = 新しいUnhandledExceptionEventHandler(CurrentDomain_UnhandledException)。 TaskScheduler.UnobservedTaskException + = TaskScheduler_UnobservedTaskException。
例外がスローされる場合は、より多くの時間のかかる操作のいくつかは、我々は、スレッドを置きます
System.Threading.ThreadPool.QueueUserWorkItem(新しい System.Threading.WaitCallback((P)=> { System.Threading.Thread.Sleep(1000年); スロー 新しい例外(" BBBを" ); }))。
CurrentDomain.UnhandledExceptionは、キャプチャされますが、このキャプチャモードではエラーの後、またはプログラムがクラッシュします。
他のスレッドを考えるための方法の下でその後の研究。
プライベート非同期無効実行()
{
のawait Task.Run(()=>
{
のThread.sleep(1000);
新しい例外( "BBB")を投げます;
});
}
例外がこのようにスローされた後、異常e.Handled = trueを、クラッシュしないことをDispatcherUnhandledExceptionをキャッチされます。