例如,假设您有一些例程注册为 ApplicationIdle 的 BeginInvoke
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 操作的中间,所以它什么时候真正空闲?
在我的第一次测试中,它似乎可以工作,但我只是想确保没有办法让它卡住/阻塞。
最佳答案
我认为您混淆了 DispatcherPriority.ApplicationIdle
。 Invoke 是同步的,可以阻止您的 UI。
DispatcherPriority
这里根据定义是优先级,相对于 Dispatcher
事件队列中的其他未决操作,调用指定的方法。因此,如果您的操作是 Dispatcher 队列中唯一发生并在 UI 线程上触发的操作,它将阻塞它直到它不返回。
关于c# - Dispatcher.Invoke on application idle on button click - 我的 UI 是否卡住/阻塞,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36785910/