Silverlight UI线程冻结

时间:2011-02-07 15:17:17

标签: wpf silverlight ui-thread

我有一个网格控件试图显示大量数据,因此在UI线程上渲染需要很长时间。

我添加了一个动画显示的加载栏,具体取决于屏幕是否忙碌(正在渲染)。

然而,当网格尝试渲染时,加载条只是冻结。我假设这是因为只有一个UI线程而且该线程很忙。

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

非常感谢,

马特

2 个答案:

答案 0 :(得分:0)

您需要处理从UI呈现中获取的枚举或数据,执行处理部分以便在单独的线程上为UI呈现准备好数据。

http://msdn.microsoft.com/en-us/library/cc221403(v=vs.95).aspx

答案 1 :(得分:0)

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

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

您是否考虑过虚拟化网格的内容?如果包装需要在VirtualizingStackPanel中呈现的FrameworkElements,则可以基本免费获得UI虚拟化。如果您想要更复杂一些,您还可以通过使用PagedCollectionView类包装数据集,然后编写来获得数据虚拟化。有关详细信息,请参阅here。另请参阅here了解另一种(更简单?)实现相同类型虚拟化的方法。