想象一下,您有一些例程将BeginInvoke注册到ApplicationIdle,例如
Dispatcher.CurrentDispatcher.BeginInvoke(DispatcherPriority.ApplicationIdle, (Action)OffLoadWork);
现在在某些情况下,在UI中执行操作时需要执行此OffLoadWork,例如在按钮单击时,我可以安全地调用
Dispatcher.CurrentDispatcher.Invoke(DispatcherPriority.ApplicationIdle, (Func<object>)(() =>
{
//do nothing just wait for the OffLoadWork to happen...
return null;
}));
或者我的UI可能会冻结,因为我正处于UI操作的中间,所以它什么时候才会空闲?
在我的第一次测试中,它似乎有效,但我只是想确保它没有办法冻结/阻止。
答案 0 :(得分:1)
我认为你很困惑DispatcherPriority.ApplicationIdle
。调用是同步的,可以阻止您的UI。
DispatcherPriority
这里根据定义是优先级,相对于Dispatcher
事件队列中的其他待处理操作,调用指定的方法。因此,如果您的操作是Dispatcher队列中唯一发生的操作并在UI线程上触发,它将阻止它直到它不返回为止。