【问题标题】:Delay rendering of a custom control in WPF在 WPF 中延迟呈现自定义控件
【发布时间】:2011-01-17 23:31:51
【问题描述】:

我有一个 WPF 自定义控件,在某些复杂场景中有时需要一段时间才能呈现。我希望能够告诉我的自定义控件显示占位符图像(例如“请稍候 - 渲染!”),然后在空闲时间实际渲染控件(在处理输入之后)。

我正在考虑修改我的自定义控件以容纳父网格和两个子网格:A)占位符图像和 B)实际内容。默认情况下 A) 是可见的,当自定义控件的可见性发生变化时,我可以 BeginInvoke 一个委托,该委托将依次显示 B) 而不是 A)。

如果屏幕上有很多/几个这样的控件实例,他们希望不会在同时渲染所有这些实例时阻塞主线程。由于委托排队的优先级低于输入优先级,因此理论上 UI 应该保持响应速度非常快。

有人遇到过类似的问题吗?

【问题讨论】:

    标签: wpf custom-controls rendering delay


    【解决方案1】:

    是的,这种方法效果很好,我已经用过好几次了。

    通常,如果控件需要在渲染之前检索和/或处理数据,我会使用这种方法。我建议在后台线程上完成所有这些工作,然后使用元素的 Dispatcher 调用实际的渲染更新。

    提示:我经常会声明一个名为 Revision 的 int 类型的内部 DP,并将其注册到 AffectsRender。然后,一旦后台线程完成了繁重的处理,它就可以调用 BeginInvoke() 来增加 Revision 属性,从而使渲染无效并导致新的渲染通道。然后,您可以像往常一样在 OnRender 覆盖中执行适当的渲染逻辑。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-11-24
      • 1970-01-01
      • 1970-01-01
      • 2012-12-22
      • 2011-01-27
      • 2013-07-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多