2012-11-24 22 views
3

我正在調查奇怪的WPF多線程應用程序掛起發生隨機生產機器上比發展更容易。Application.Dispatcher.UnhandledException和CurrentDomain.UnhandledException

我添加了Application.Dispatcher.UnhandledException和CurrentDomain.UnhandledException事件處理程序來記錄每個和每個異常,以防止應用程序崩潰,因爲它是系統shell。

我懷疑掛起的原因是我處理這些事件,而不是讓應用程序崩潰,這讓我說,這是當我監視應用程序活動時,它掛起使用Windows任務管理器我注意到CPU加載可能是由應用程序中的後臺任務引起的,並且這些後臺任務正在按預期寫入日誌。

記錄器類使用BeginInvoke異步地將日誌寫入磁盤。

最大的問題是每當應用程序在生產機器中掛起時,我在日誌文件中找不到任何東西。

現在我有兩個問題:

  1. 什麼是這些事件的火上。 「Application.Dispatcher.UnhandledException和CurrentDomain.UnhandledException」。

2.Is有反正我能設法能夠知道是我的代碼失敗

注意:我用在後臺任務很多的Thread.Sleep作爲我管理的線程我自己我認爲我用這種方法出錯了,我正在考慮從頭開始重寫所有的後臺任務。

任何幫助將不勝感激。本次活動的

回答

2

順序是:

  1. Application.DispatcherUnhandledException
  2. CurrentDomain.UnhandledException

如果你想從例外,你的代碼是沒有得到信息,檢查屬性StackTrace。您也可以附加到您的項目pdb文件,在這種情況下,您將獲得帶有行號的StackTrace。

+0

此順序對於在此過程中運行的所有線程是否相同? –

+0

在主線程中是的,但要更多的信息檢查我給你的這兩個鏈接。描述了異常處理的線程行爲。 – kmatyaszek

+0

非常感謝! –