我們有一個使用/ CLR編譯的MFC 8應用程序,它包含大量的Windows窗體用戶控件,並且包含使用ElementHost的WPF用戶控件。由於我們的軟件架構,我們不能直接使用HwndHost。我們在這裏觀察到一個非常奇怪的行爲,我們無法理解:我是WPF引擎中發現錯誤的發現者嗎?
當應用程序啓動期間CPU負載非常高並且存在大量ElementHost實例時,整個屬性引擎完全停止工作。例如,通常可以正常工作的動畫現在不會更新綁定屬性的值,它們只會在啓動後停留在某個隨機值。當我設置一個不綁定任何屬性的值時,該值被正確存儲在依賴項屬性中(調用getter返回新值),但是可視化表示永遠不會反映這一點。我將背景設置爲紅色,但背景顏色不變。
我們在很多運行Windows XP SP2的不同機器上測試過它,它具有很高的可重複性。
這裏有趣的是,事實上有一種情況,其中綁定屬性實際上從動畫中拾取新值,並且視覺根據屬性值進行更新。當我調整ElementHost的大小或隱藏並重新顯示父本機控件時。只要我這樣做,綁定到一個動畫的屬性拾取一個新的值,並基於新的屬性值重新渲染視覺效果 - 但只有一次 - 如果我想看另一個更新,我必須調整ElementHost的大小。
你對這裏可能發生的事情有什麼解釋嗎?或者我可以如何解決這個問題以找出答案?我能做些什麼來調試呢?有沒有一種方法可以獲得更多關於WPF實際執行或WPF可能崩潰的信息?對我來說,它目前看起來像WPF本身的錯誤,因爲它只發生在啓動時的高CPU負載。
您是否正在使用線程處理工作進程? – JFV 2009-01-23 20:36:26
沒有任何與WPF相關的事情正在UI線程上發生。 (創建和應用動畫設置屬性等)在WPF中實際上,如果我試圖設置一個屬性的UI線程會導致異常的任何其他。 – bitbonk 2009-01-23 21:56:25
如果您有任何綁定的對象,您還必須在UI線程上更改它們。雖然我懷疑這是問題所在。 – bh213 2009-01-27 15:14:56