c# - Dispatcher.Invoke on application idle on button click - 我的 UI 是否卡住/阻塞

标签 c# wpf dispatcher

例如,假设您有一些例程注册为 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/

相关文章:

c# - 是否可以用多个 Http 属性装饰 ASP.NET WEB API Controller 方法

c# - 我如何将更多时间添加到 datetime.now 解析它然后重置回原始 datetime.now?

wpf - app.xaml 中的数据模板在没有任何样式的情况下不会被拾取?

c# - 关于使用 Dispatcher Priority 和 Binding 的建议

.net - 延迟调度调用?

c# - 推送 bin/js 文件后,Servicestack 丢失 session ,直到缓存清除

c# - 我怎样才能找到整数中9的个数

c# - WPF:隐藏时将文本绑定(bind)到标题 DataGridColumn 中

c# - WPF:如果您正在运行的应用程序是 'idle',则创建您自己的屏幕保护程序

wpf - 绑定(bind)到在单独的线程上更新的ObservableCollection的WPF DataGrid无法维护排序