调度员困境 - 如何正确派遣?

时间:2013-03-05 17:13:06

标签: wpf

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

1 个答案:

答案 0 :(得分:3)

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

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

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

至于你的具体问题:

  

所以我向你们提出的问题是Dispatcher完全做了什么,除了保留任务队列并按优先顺序执行它们之外?

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

  

队列看起来像什么?

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

  

如果按顺序放置3个任务,优先级为“normal”,然后是一个优先级为“send”的任务。哪个会先执行?

这取决于。如果当时还有其他工作正在进行,Send任务将首先处理。如果没有其他工作发生,Normal任务可能会在您提交Send任务之前执行,在这种情况下,订单将会更改。但是,Send任务将尽快执行。

  

执行优先级正常的3个任务的顺序是什么?

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