我已经阅读了 WPF 中有关 Dispatcher 的文章,但没有一篇文章能很好地解释 Dispatcher 的行为。所以我对你们的问题是,除了保留任务队列并按优先级执行它们之外,Dispatcher 究竟做了什么?队列看起来像什么?如果我按优先级“正常”依次放置 3 个任务,然后依次放置一个优先级“发送”的任务。哪个会先执行?优先级为 normal 的 3 个任务将按什么顺序执行?是否有一些关于 Dispatcher 的非常好的教程或一些你们想分享的概念证明?
1 回答
这Dispatcher
实际上只是 WPF 应用程序的消息泵。
与传统的 Windows 消息泵不同,它确实具有内置的优先级,因此它的作用类似于优先级队列,而不是传统的(先进先出)队列。
如果你发送一个优先级为 的消息Send
,它将在其他优先级的操作之前得到处理,例如Normal
. 您可以在帮助中查看优先级列表及其值DispatcherPriority
。较高优先级的消息总是在较低优先级的消息(尚未被处理)之前处理。
至于你的具体问题:
所以我对你们的问题是,除了保留任务队列并按优先级执行它们之外,Dispatcher 究竟做了什么?
它处理和处理 Windows 消息,就像传统 Win32 或 Windows 窗体应用程序中的普通 Windows 消息泵一样。优先队列的构建是为了处理除了标准 Windows 消息之外的用户消息,并具有内置的优先级。
队列看起来像什么?
它实际上是一个优先级队列。
如果我按优先级“正常”依次放置 3 个任务,然后依次放置一个优先级“发送”的任务。哪个会先执行?
这取决于。如果当时有其他工作发生,Send
任务将首先处理。如果没有其他工作发生,则Normal
任务可能会在您提交Send
任务之前执行,在这种情况下,顺序将发生变化。但是,该Send
任务将尽快执行。
优先级为 normal 的 3 个任务将按什么顺序执行?
这些将按照它们被调度的顺序执行。