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