Dispatcher.Invoke应用程序空闲按钮单击 - 我的UI冻结/阻止

时间:2016-04-22 05:52:45

标签: c# wpf dispatcher

想象一下,您有一些例程将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操作的中间,所以它什么时候才会空闲?

在我的第一次测试中,它似乎有效,但我只是想确保它没有办法冻结/阻止。

1 个答案:

答案 0 :(得分:1)

我认为你很困惑DispatcherPriority.ApplicationIdle。调用是同步的,可以阻止您的UI。

DispatcherPriority这里根据定义是优先级,相对于Dispatcher事件队列中的其他待处理操作,调用指定的方法。因此,如果您的操作是Dispatcher队列中唯一发生的操作并在UI线程上触发,它将阻止它直到它不返回为止。