【发布时间】:2011-12-19 13:23:42
【问题描述】:
在阅读了Dispatcher 类的文档后,我意识到它也可以用于非 UI 的操作队列。
那么Dispatcher 类实际上是如何工作的呢?我知道,它的主要工作是将动作排队到特定线程 - 但它如何将这些动作“发送”到线程?线程如何“获取”这些操作?
我最好的猜测是每个线程都有某种“线程队列”,但我还是不知道。
【问题讨论】:
-
您是在 WPF 还是 Silverlight 的上下文中询问的?
-
@JoeWhite,两者都不是。您也可以在非 gui 应用程序中使用
Dispatcher。 -
@ebb,您可以在没有 GUI 的应用程序中使用它,但这并没有什么意义……有更充分的工具可以做到这一点。调度程序的设计考虑了 UI 场景。
-
@ThomasLevesque,我的问题仍然存在。我知道当在像 WPF 这样的 gui 应用程序中使用时,调度程序将简单地将操作排队到消息队列中。但是,由于普通的“非 gui”线程没有这样的消息循环(至少不是我所知道的),我对它的工作原理很感兴趣。
-
有趣的问题。显然 Dispatcher 必须使用 Windows 消息队列;但不仅如此,因为 Dispatcher 添加了消息优先级,这不是普通消息队列的一部分。和线程don't even have a message queue unless they create at least one window handle,所以如果你说 Dispatcher 即使在非 UI 应用程序中也能工作是对的,那么它肯定做的不仅仅是包装消息队列。
标签: c# .net windows multithreading