2011-02-07 133 views
3

我有一個網格控件試圖顯示大量的數據,所以它需要很長時間才能在UI線程上呈現。Silverlight UI線程凍結

我已經添加了一個動畫和顯示取決於屏幕是否繁忙(正在渲染)的加載欄。

但是,當網格試圖渲染時,加載欄只是凍結。我假設這是因爲只有一個UI線程並且線程繁忙。

有沒有人知道我可以保持加載欄動畫的方式?

非常感謝,

馬特

回答

0

如果你堅持在網格渲染的所有數據一次,這一切都取決於是否網格的渲染代碼「產量」與否,有點像舊的Windows窗體「的DoEvents()」方法。這聽起來像它的實現方式,它實際上並沒有在渲染過程中讓處理回到UI線程,因此你的進度條永遠不會被更新。

網格是否在渲染其內容時調用自己的代碼?如果是這樣,你可以使用這些實例來更新進度條的狀態。

你看過虛擬化網格的內容嗎?如果您將需要呈現的FrameworkElement包裝到VirtualizationStackPanel中,則可以基本免費獲得UI虛擬化。如果你想要更復雜一點,你也可以通過用PagedCollectionView類包裝你的數據集,然後寫入來獲得數據虛擬化。有關更多詳細信息,請參閱here。另請參閱here瞭解實施相同類型虛擬化的另一種(更簡單?)方法。

+0

我說網格試圖以抽象的方式來簡化問題。我們實際上使用Telerik的第三方控件之一,所以很遺憾我們不能更改控件代碼。 – 2011-02-09 10:45:58