2011-02-07 95 views
3

我有一个网格控件试图显示大量的数据,所以它需要很长时间才能在UI线程上呈现。Silverlight UI线程冻结

我已经添加了一个动画和显示取决于屏幕是否繁忙(正在渲染)的加载栏。

但是,当网格试图渲染时,加载栏只是冻结。我假设这是因为只有一个UI线程并且线程繁忙。

有没有人知道我可以保持加载栏动画的方式?

非常感谢,

马特

回答

0

如果你坚持在网格渲染的所有数据一次,这一切都取决于是否网格的渲染代码“产量”与否,有点像旧的Windows窗体“的DoEvents()”方法。这听起来像它的实现方式,它实际上并没有在渲染过程中让处理回到UI线程,因此你的进度条永远不会被更新。

网格是否在渲染其内容时调用自己的代码?如果是这样,你可以使用这些实例来更新进度条的状态。

你看过虚拟化网格的内容吗?如果您将需要呈现的FrameworkElement包装到VirtualizationStackPanel中,则可以基本免费获得UI虚拟化。如果你想要更复杂一点,你也可以通过用PagedCollectionView类包装你的数据集,然后写入来获得数据虚拟化。有关更多详细信息,请参阅here。另请参阅here了解实施相同类型虚拟化的另一种(更简单?)方法。

+0

我说网格试图以抽象的方式来简化问题。我们实际上使用Telerik的第三方控件之一,所以很遗憾我们不能更改控件代码。 – 2011-02-09 10:45:58