混淆在WPF刷新UI(Confusion about Refreshing the UI in WP

2019-07-21 02:53发布

我听说,这刷新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不会帮助我任何进一步的家伙。

Answer 1:

微软建议做你的代码不使用的是什么的略低不同的方式PushFrame 。

该代码无关与渲染。 它的作用是相似DoEvents从VB6和WinForms已知的方法。 DoEvents停止程序时抽Windows的消息队列和处理队列中的消息。 这包括任何呈现消息,例如WM_PAINTWM_NCPAINT

该代码指示调度停止当前线程和泵的队列,并处理有DispatcherPriority.Render或更高的优先级的所有消息。 如果在队列中任何未决的绘制消息,例如,如果InvalidateRect已经某处框架调用,这些信息将被处理,并且UI将重新呈现。

DoEvents一直被认为是一个代码味道,因为它绕过消息队列。 如果你想有一个快速响应的用户界面,你应该使用工作线程来代替。



Answer 2:

这可以用来强制WPF更新,因为调用的优先级的用户界面。 由于该调用使用调度同步,已经与相同或更高的优先级比队列中的任何任务DispatcherPriority.Render会运行您提供的委托之前运行。

这里是潜在值列表的DispatcherPriority ,并说明任务由调度运行的顺序。



文章来源: Confusion about Refreshing the UI in WPF