我有一個網格控件試圖顯示大量的數據,所以它需要很長時間才能在UI線程上呈現。Silverlight UI線程凍結
我已經添加了一個動畫和顯示取決於屏幕是否繁忙(正在渲染)的加載欄。
但是,當網格試圖渲染時,加載欄只是凍結。我假設這是因爲只有一個UI線程並且線程繁忙。
有沒有人知道我可以保持加載欄動畫的方式?
非常感謝,
馬特
我有一個網格控件試圖顯示大量的數據,所以它需要很長時間才能在UI線程上呈現。Silverlight UI線程凍結
我已經添加了一個動畫和顯示取決於屏幕是否繁忙(正在渲染)的加載欄。
但是,當網格試圖渲染時,加載欄只是凍結。我假設這是因爲只有一個UI線程並且線程繁忙。
有沒有人知道我可以保持加載欄動畫的方式?
非常感謝,
馬特
您需要處理枚舉或數據從UI渲染取,做獲取數據準備在單獨的線程中UI渲染處理部分。
http://msdn.microsoft.com/en-us/library/cc221403(v=vs.95).aspx
如果你堅持在網格渲染的所有數據一次,這一切都取決於是否網格的渲染代碼「產量」與否,有點像舊的Windows窗體「的DoEvents()」方法。這聽起來像它的實現方式,它實際上並沒有在渲染過程中讓處理回到UI線程,因此你的進度條永遠不會被更新。
網格是否在渲染其內容時調用自己的代碼?如果是這樣,你可以使用這些實例來更新進度條的狀態。
你看過虛擬化網格的內容嗎?如果您將需要呈現的FrameworkElement包裝到VirtualizationStackPanel中,則可以基本免費獲得UI虛擬化。如果你想要更復雜一點,你也可以通過用PagedCollectionView類包裝你的數據集,然後寫入來獲得數據虛擬化。有關更多詳細信息,請參閱here。另請參閱here瞭解實施相同類型虛擬化的另一種(更簡單?)方法。
我說網格試圖以抽象的方式來簡化問題。我們實際上使用Telerik的第三方控件之一,所以很遺憾我們不能更改控件代碼。 – 2011-02-09 10:45:58
數據已經在單獨的線程上獲得。這不是花費時間的那一點,它是數據的實際物理渲染。 – 2011-02-07 15:41:29