2010-07-16 76 views
0

只是有一個有趣的問題,由以下的事件序列中的WPF問題後恢復:從WPF的OnRender覆蓋叫怎樣的OnRender

  • 代碼拋出異常(有沒有什麼神祕之本 - 這是在一些視圖模型代碼中的一個微不足道的錯誤)

  • 異常是未處理的,所以被我們的DispatcherUnhandledException處理程序拾取。

  • DispatchedUnhandledException處理程序試圖打開一個WPF窗口來顯示異常,允許報告等等。窗口打開失敗,拋出另一個異常(來自我們的全局異常處理程序),終止應用程序。

看來WPF採取暴力異常(!),以嘗試的的OnRender執行過程中打開一個新的窗口,以及各種不好的事情發生,從第二Win32Exception由內WPF深一CreateWindowEx被拋出,以如果我們嘗試並在我們的異常處理程序中執行類似MessageBox.Show的操作時,應用程序立即終止,當我們檢測到雙重異常時。

我沒有今天這種情況處理的特殊問題,但有一個普遍的問題:

有沒有辦法在一個OnRender將處理程序中恢復狀態,WPF,讓普通WPF活動可以繼續嗎?我試圖在重新拋出它之前捕捉OnRender中的異常並調用dc.Close(),但這似乎沒有任何區別。我想我應該找一個'WpfState.Reset()'調用或類似的東西。

回答

0

是否有可能您嘗試在另一個線程中打開窗口而不是主UI線程?這會導致異常。嘗試使用Dispatcher在主線程中打開窗口,如果它尚未。

據我記得 - 渲染髮生在輔助線程,以防止阻塞UI線程。

+0

嗯。我會看看,但我不認爲OnRender是通過與主U/I不同的線程調用的。我認爲這個帖子可能更接近標準,但除了'不這樣做'之外,它不提供任何建議:http://blogs.msdn.com/b/nickkramer/archive/2006/05/06/ 591252.aspx – 2010-07-16 21:44:22