我有一个网格控件试图显示大量数据,因此在 UI 线程上呈现需要很长时间。
我添加了一个加载栏,它根据屏幕是否忙碌(正在渲染)进行动画和显示。
但是,当网格尝试渲染时,加载栏只是冻结。我假设这是因为只有一个 UI 线程并且该线程很忙。
有谁知道我可以保持加载栏动画的方法?
非常感谢,
马特
我有一个网格控件试图显示大量数据,因此在 UI 线程上呈现需要很长时间。
我添加了一个加载栏,它根据屏幕是否忙碌(正在渲染)进行动画和显示。
但是,当网格尝试渲染时,加载栏只是冻结。我假设这是因为只有一个 UI 线程并且该线程很忙。
有谁知道我可以保持加载栏动画的方法?
非常感谢,
马特
如果你坚持网格一次渲染所有数据,这完全取决于网格的渲染代码是否可以“屈服”,有点像旧的 Windows 窗体“DoEvents()”方法。听起来它的实现方式实际上是在渲染过程中不会将处理返回给 UI 线程,因此您的进度条永远不会更新。
网格在渲染其内容时是否会调用您自己的代码?如果是这样,您可以使用这些实例来更新进度条的状态。
您是否考虑过虚拟化网格的内容?如果将需要呈现的 FrameworkElements 包装在 VirtualizingStackPanel 中,则基本上可以免费获得 UI 虚拟化。如果您想要更复杂一点,您还可以通过使用 PagedCollectionView 类包装您的数据集,然后编写 . 有关更多详细信息,请参见此处。另一种(更简单?)实现相同类型虚拟化的方法请参见此处。
您需要处理从 UI 渲染中获取的枚举或数据,执行处理部分以使数据准备好在单独的线程上进行 UI 渲染。
http://msdn.microsoft.com/en-us/library/cc221403(v=vs.95).aspx