【问题标题】:Under the hood of Dispatcher在 Dispatcher 的引擎盖下
【发布时间】:2013-09-16 18:28:28
【问题描述】:

大家好,

我对 Dispatcher 没有什么顾虑。

据我所知,Dispather 是 UI 线程,因此当我使用 Dispatcher.Invoke 时,我让 UI 等到我的操作完成。

现在我的问题是当我使用异步的 BeginInvoke 方法时 UI 是否等待?

Dispatcher 的“正常”优先级是什么?这是否意味着它会立即执行我的操作?

当我只调用 BeginInvoke 而没有 DispatcherProprity 时,调度程序会与我的操作关联哪个默认属性?

现在让我们将普通优先级与 BeginInvoke 结合起来。调度程序是否会立即异步执行我的操作,或者幕后究竟发生了什么?

如果此问题重复,我深表歉意。

【问题讨论】:

标签: wpf


【解决方案1】:

根据MSDNDispatcher

提供用于管理线程工作项队列的服务。

所以在一个人上调用Invoke 不一定 一定会立即产生效果...它只是将您的请求添加到队列中 - 这确实 意味着您的请求将立即执行。

DispatcherProprity 值告诉框架将请求放入队列的哪个位置。以高优先级调用 Invoke 将导致您的请求被放置在高级别队列中,就在具有相同优先级的任何其他请求之后

关于对BeginInvoke 的调用,唯一真正的区别是

控制在被调用后立即返回到调用对象。

据我所知,包括优先级在内的其他一切都是一样的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-01
    • 1970-01-01
    • 2018-03-03
    • 1970-01-01
    相关资源
    最近更新 更多