4

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

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

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

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

4

1 回答 1

1

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

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

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

于 2010-02-17T19:02:52.110 回答