1

我需要替代Dispatcher(.net 3.0)用于Windows服务(在.net 2.0中完成)。你能给我一些想法如何实现这样的事情或指向我的一些链接?在.net 2.0上下文中使用Dispatcher类的替代方法

我知道调度员有一个SynchronizationContext落后,但我不知道如何将SynchronizationContext用于服务。

如果你认为我应该坚持Dispatcher(.NET 3.0)...我怎么能操纵它(OnServiceStop,​​)

编辑: 更多细节(见.. here

想法是,我想主持我的Windows服务的一些扩展/插件,这将通过方法ExecuteCommand(type, params)之间相互沟通。

如果从插件内部执行该方法,该方法还会向服务引发一个事件,以便接收结果。每个插件都可以拥有自己的线程,因此它可以调用此方法ExecuteCommand,因此我想收集所有调用并将其同步到一个线程(主服务线程)中,以便适当地返回结果。

这就是调度员进场的原因。但是,我希望在.net 2.0中有一些东西,或者您认为Dispatcher在我的情况下很好吗?

谢谢。

回答

2

Windows服务没有类似Dispatcher(或Windows窗体中的消息循环)。如果你想从一个线程编组到另一个线程,“目标”线程将不得不运行它自己的消息循环。

如果你可以告诉我们更多关于你想要达到的目标,它会让你更容易帮助你。

编辑:好的,它听起来像基本上想要一个生产者/消费者队列:一个线程等待,直到队列中出现的东西,并处理它。生产者可以随时添加到队列中。

我在我的线程教程中有very simple implementation of a producer/consumer queue,但是可能会有更高级的实现。 (.NET 4使这很简单,但是在.NET 2中更难。)如果你使用我的实现,那么你需要考虑使它变得通用并添加终止条件。 Joe Albahari也有another implementation you should look at

+0

细节从这里开始,但它是一个不同的问题:http://stackoverflow.com/questions/3447189/c-multiple-sources-different-threads-one-event-handler ...我会尝试编辑我的问题 – Learner 2010-08-11 07:29:22

+0

嗨,乔恩,非常感谢!你有一篇很好的文章。因为我的代码已经达到了更高的复杂程度(用于插件通信)......我希望在表面上使用更轻量级的东西。这就是为什么我在寻找Dispatcher之类的东西。你知道吗,这是为Windows服务工作吗?你知道我在服务启动/停止期间如何操纵它吗? – Learner 2010-08-11 08:00:35

+0

如何在.net 2.0(对于Windows服务)中从一个线程编码到另一个线程? – Learner 2010-08-11 08:02:42

相关问题