关于在WPF中刷新UI的困惑

我听说这会刷新用户界面,但为什么会这样呢? Dispatcher调用此空操作,即它没有调用InvalidateMeasure() ,这将触发UI重新测量并重新排列并在操作中重新呈现。 这里的度量和安排流程在哪里update/refresh UI?

 private static Action EmptyDelegate = delegate() { }; public static void Refresh(UIElement uiElement) { uiElement.Dispatcher.Invoke(DispatcherPriority.Render, EmptyDelegate); } 

有帮助吗?

EDITED:我想知道为什么UI呈现的细节。 well that triggers ui update答案well that triggers ui update没有帮助我更多的人。

Microsoft建议使用PushFrame执行代码执行操作的略微不同方式。

代码与渲染无关。 它的作用类似于VB6和WinForms中已知的DoEvents方法。 DoEvents在泵送Windows消息队列和处理队列中的消息时暂停程序。 这包括任何渲染消息,如WM_PAINTWM_NCPAINT

代码指示Dispatcher暂停当前线程并抽取其队列并处理优先级为DispatcherPriority.Render或更高的所有消息。 如果队列中有任何挂起的呈现消息,例如,如果框架在某处调用了InvalidateRect ,则将处理这些消息并重新呈现UI。

DoEvents一直被认为是代码气味,因为它绕过了消息队列。 如果您需要响应式用户界面,则应使用工作线程。

由于调用的优先级,这可用于强制WPF更新UI。 由于此调用同步使用Dispatcher,因此在运行您提供的委托之前,将运行已排队等于或高于DispatcherPriority.Render的任何任务。

以下是DispatcherPriority的潜在值列表,它解释了调度程序运行的订单任务。