C# InvalidateVisual是否以懒惰的方式工作?

C# InvalidateVisual是否以懒惰的方式工作?,c#,wpf,custom-controls,rendering,invalidation,C#,Wpf,Custom Controls,Rendering,Invalidation,如果在自定义WPF控件中调用InvalidateVisual,实际的布局计算和渲染过程何时发生 当我完成处理时,立即或类似于在WinForms中?联机帮助会回答您的问题: 联机帮助: 此方法在内部调用InvalidateArrange 联机帮助: 使元素的排列状态(布局)无效。失效后,元素将更新其布局,将异步发生,除非随后由UpdateLayout强制执行 换句话说:InvalidateVisual不会立即生效;它会一直等到当前代码完成(除非您调用了) 您还可以查看Microsoft的参考源:。

如果在自定义WPF控件中调用
InvalidateVisual
,实际的布局计算和渲染过程何时发生


当我完成处理时,立即或类似于在WinForms中?

联机帮助会回答您的问题:

联机帮助:

此方法在内部调用InvalidateArrange

联机帮助:

使元素的排列状态(布局)无效。失效后,元素将更新其布局,将异步发生,除非随后由UpdateLayout强制执行

换句话说:
InvalidateVisual
不会立即生效;它会一直等到当前代码完成(除非您调用了)

您还可以查看Microsoft的参考源:。您将看到,
InvalidateArrange()
不调用任何阻塞代码;它会立即返回。

请注意,InvalidateVisuals()比Form.Invalidate()昂贵得多,因为它会导致完全重新启动。如果要在不使用布局的情况下高效地更新WPF视觉效果,请创建一个DrawingGroup“backingStore”,在OnRender()期间将其添加到DrawingContext中,然后在需要时更新DrawingGroup,它将高效地重新绘制UI。