我听说,这刷新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
不会帮助我任何进一步的家伙。
微软建议做你的代码不使用的是什么的略低不同的方式PushFrame 。
该代码无关与渲染。 它的作用是相似DoEvents
从VB6和WinForms已知的方法。 DoEvents
停止程序时抽Windows的消息队列和处理队列中的消息。 这包括任何呈现消息,例如WM_PAINT
和WM_NCPAINT
。
该代码指示调度停止当前线程和泵的队列,并处理有DispatcherPriority.Render或更高的优先级的所有消息。 如果在队列中任何未决的绘制消息,例如,如果InvalidateRect
已经某处框架调用,这些信息将被处理,并且UI将重新呈现。
DoEvents
一直被认为是一个代码味道,因为它绕过消息队列。 如果你想有一个快速响应的用户界面,你应该使用工作线程来代替。
这可以用来强制WPF更新,因为调用的优先级的用户界面。 由于该调用使用调度同步,已经与相同或更高的优先级比队列中的任何任务DispatcherPriority.Render
会运行您提供的委托之前运行。
这里是潜在值列表的DispatcherPriority ,并说明任务由调度运行的顺序。