我已经阅读了关于WPF中的Dispatcher的文章,但没有一篇真的很好地解释Dispatcher的行为。所以我对你们的问题是Dispatcher究竟做了什么,除了保留一个任务队列并按他们的优先级执行它们之外呢?队列看起来是什么样子?如果我按优先级“正常”顺序放置3个任务,然后优先“发送”一个任务。哪个会先执行? 3个优先级正常的任务按照什么顺序执行?有关于Dispatcher的一些非常好的教程,或者你们想分享的一些概念证明吗?调度员窘境 - 如何正确调度?
2
A
回答
3
Dispatcher
实际上只是WPF应用程序的消息泵。
与传统的Windows消息泵不同,它具有内置的优先级,所以它的行为类似于priority queue而不是传统的(先进先出)队列。
如果您发送优先级为Send
的消息,它将在其他优先级(如Normal
)的其他操作之前得到处理。您可以在DispatcherPriority
帮助中查看优先级列表及其值。优先级较高的消息始终在低优先级消息之前处理(尚未处理)。
至于你具体的问题:
所以我给你们的问题是什么做调度员除了准确保持的任务队列,并通过它们的优先级执行呢?
它处理Windows消息并对其进行处理,就像传统的Win32或Windows Forms应用程序中的常规Windows消息泵一样。优先队列是为了处理除标准窗口消息之外的用户消息而建立的,具有内置的优先级。
队列看起来是什么样子?
这是一个有效的优先级队列。
如果我按照优先级“正常”顺序放置3个任务,然后再优先“发送”一个任务。哪个会先执行?
这取决于。如果此时正在进行其他工作,则Send
任务将首先处理。如果没有其他工作正在发生,则在您提交Send
任务之前可能会执行Normal
任务,在这种情况下,订单将发生更改。但是,Send
任务将尽快执行。
在什么样的顺序将优先正常的3个任务被执行?
这些将按照它们被调度的相同顺序执行。
相关问题
- 1. 如何正确调用角度路由?
- 2. Hunchentoot调度员
- 3. 调度员
- 4. Redux - 正确调度行动
- 5. 调度到正确的reducer
- 6. OneWayToSource窘境
- 7. Akka演员和调度员
- 8. 应用程序调度员和控制调度员
- 9. 调度员 - 它是如何工作的?
- 10. 你如何界面事件调度员?
- 11. 库设计窘境
- 12. 如何调度
- 13. 获得正确的WPF调度员在一个线程
- 14. windows store获取调度员的正确方式,异步
- 15. 春:访问多个调度员正确的WebApplicationContext宣布
- 16. 我如何确保调度通知在正确的时间
- 17. 调度员在WPF ViewModel类
- 18. 调度员没有订户
- 19. 设计模式 - 调度员
- 20. 什么是调度员
- 21. Akka调度员继承权
- 22. Optaplanner员工调度程序
- 23. 关于wpf调度员
- 24. Handlemessage(cMessage * msg)未正确调度
- 25. Silverlight UI调度程序 - 正确执行
- 26. Colorbox不调整到正确的高度
- 27. Highchart不能正确调整角度js
- 28. 气流不调度正确的Python
- 29. 线程调度轮询/调度调度
- 30. 调用调度员的代理
谢谢你Reed Copsey。我还有一个问题要问你。什么是ContextLayoutManager。这似乎是像调度员或使用WPF中的分派器的东西。此外,如果我将调度程序调用为BeginInvoke(..)优先级为“normal”的方法,并且该方法为this.InvalidateMeasure()。只有将度量脏标志设置为真的InvalidateMeasure()才会被执行,而不会实际测量(),或者会将InvalidateMeasure()和measure()组合到同一个任务中,并且会与普通优先级一起执行? – 2013-03-05 17:33:32
@hedgehog - 对于评论来说有点多(真正全新的问题) - ContextLayoutManager是一个用于处理布局问题的内部类。如果您调度'InvalidateMeasure()',它只会在该“任务”中失效 - 实际的度量消息将在稍后发生。 – 2013-03-05 17:36:41
我已经测试过了。似乎InvalidateMeasure()和measure()将被合并为一个并一起执行。我不知道这是为什么。此外,我想打开一个新的聊天来讨论ContextLayoutManager,只是我不知道如何创建一个新的聊天频道。 – 2013-03-05 17:39:08