【问题标题】:Silverlight UI Thread FreezingSilverlight UI 线程冻结
【发布时间】:2011-06-22 19:35:10
【问题描述】:

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

我添加了一个加载栏,它根据屏幕是否繁忙(正在渲染)进行动画和显示。

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

有谁知道我可以让加载栏保持动画的方式吗?

非常感谢,

马特

【问题讨论】:

    标签: wpf silverlight ui-thread


    【解决方案1】:

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

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

    【讨论】:

    • 数据已经在一个单独的线程上得到了。这不是花费时间的部分,而是该数据的实际物理渲染。
    【解决方案2】:

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

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

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

    【讨论】:

    • 我说网格是为了尝试以抽象的方式简化问题。我们实际上正在使用 Telerik 的第三方控件之一,所以很遗憾我们无法更改控件代码。
    • 您真的需要一次显示所有数据吗?或者某种分页/虚拟化/延迟检索方案会起作用吗?
    猜你喜欢
    • 2021-12-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多