2010-02-17 50 views
3

我有一個WPF自定義控件,有時需要一段時間才能在某些複雜場景中呈現。我希望能夠告訴我的自定義控件顯示佔位符圖像(例如「Please wait - rendering!」),然後在空閒時間(處理輸入後)實際渲染控件。在WPF中延遲呈現自定義控件

我在考慮將自定義控件修改爲保存父網格和兩個子元素:A)佔位符圖像和B)實際內容。默認情況下,A)是可見的,當自定義控件的可見性發生變化時,我可以BeginInvoke一個委託,它將依次顯示B)而不是A)。

如果在屏幕上有很多/幾個這樣的控制實例,他們希望在同時渲染所有這些控制實例時不會阻塞主線程。由於代表排隊的優先級低於輸入優先級,所以UI在理論上應該保持非常高的響應度。

有沒有人遇到類似的問題?

回答

1

是的,這種方法可以正常工作,我已經多次使用它。

通常,如果控件需要在呈現前檢索和/或處理數據,則使用此方法。我建議在後臺線程上執行所有這些工作,然後使用元素的Dispatcher調用實際的渲染更新。

提示:我經常會聲明一個名爲類型爲int的修訂版的內部DP,並將其註冊到AffectsRender。然後,一旦後臺線程完成其繁重的處理,就可以通過BeginInvoke()調用來增加Revision屬性,從而使渲染失效並導致新的渲染過程。像往常一樣,您可以在OnRender覆蓋中執行適當的渲染邏輯。