2

我已经阅读了 WPF 中有关 Dispatcher 的文章,但没有一篇文章能很好地解释 Dispatcher 的行为。所以我对你们的问题是,除了保留任务队列并按优先级执行它们之外,Dispatcher 究竟做了什么?队列看起来像什么?如果我按优先级“正常”依次放置 3 个任务,然后依次放置一个优先级“发送”的任务。哪个会先执行?优先级为 normal 的 3 个任务将按什么顺序执行?是否有一些关于 Dispatcher 的非常好的教程或一些你们想分享的概念证明?

4

1 回答 1

3

Dispatcher实际上只是 WPF 应用程序的消息泵。

与传统的 Windows 消息泵不同,它确实具有内置的优先级,因此它的作用类似于优先级队列,而不是传统的(先进先出)队列。

如果你发送一个优先级为 的消息Send,它将在其他优先级的操作之前得到处理,例如Normal. 您可以在帮助中查看优先级列表及其值DispatcherPriority。较高优先级的消息总是在较低优先级的消息(尚未被处理)之前处理。

至于你的具体问题:

所以我对你们的问题是,除了保留任务队列并按优先级执行它们之外,Dispatcher 究竟做了什么?

它处理和处理 Windows 消息,就像传统 Win32 或 Windows 窗体应用程序中的普通 Windows 消息泵一样。优先队列的构建是为了处理除了标准 Windows 消息之外的用户消息,并具有内置的优先级。

队列看起来像什么?

它实际上是一个优先级队列。

如果我按优先级“正常”依次放置 3 个任务,然后依次放置一个优先级“发送”的任务。哪个会先执行?

这取决于。如果当时有其他工作发生,Send任务将首先处理。如果没有其他工作发生,则Normal任务可能会在您提交Send任务之前执行,在这种情况下,顺序将发生变化。但是,该Send任务将尽快执行。

优先级为 normal 的 3 个任务将按什么顺序执行?

这些将按照它们被调度的顺序执行。

于 2013-03-05T17:18:40.203 回答