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