在我的App.xaml.cs中,我有處理DispatcherUnhandledExceptions(UI線程)和UnhandledException(非UI線程)的事件。當我在dispatcher.Invoke中拋出異常時,dispatcherhandler捕獲異常並處理它。記錄異常之後,我將e.Handled設置爲true。現在奇怪的行爲,如果我拋出調度程序之外的異常。調用作爲一個regualr統計,控制發送到調度程序異常處理程序,但方法處理後,應用程序基本上失去控制,但我可以告訴它仍然運行通過尋找在停止按鈕中與應用程序在處理UnhandledException後進入未知/鎖定狀態
還有一件事,如果我將e.handled設置爲false,控件將發送到非UI線程異常處理程序。
那麼,爲什麼在Dispatcher處理程序中處理異常之後,應用程序被鎖定呢?
這裏是我的代碼
private void App_DispatcherUnhandledException(object sender, DispatcherUnhandledExceptionEventArgs e)
{
// log exception here
e.Handled = true;
} // control is lost after executing this block
private void App_UnhandledException(object sender, UnhandledExceptionEventArgs e)
{
try
{
Exception ex = e.ExceptionObject as Exception;
// log exception here
}
finally
{
Environment.Exit(-1);
}
}
但爲什麼應用程序在執行e.handled = true後進入植物狀態?在我的窗口構造函數中,我拋出異常,拋出新的異常(「一些異常」)。控件發送到dispatcherUnhandledException處理程序,但該應用程序仍然繼續運行。 – Syler
我不會推薦從窗口構造函數中拋出異常。相反,將您的邏輯放入Initialized或Loaded事件中,然後將自己殺死爲一個窗口。 –