我有一个网格控件试图显示大量的数据,所以它需要很长时间才能在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