在.net 2.0上下文中使用Dispatcher类(来自.net 3.0)的替代方法

时间:2010-08-11 07:16:18

标签: c# multithreading windows-services dispatcher synchronizationcontext

我需要Dispatcher(.net 3.0)的替代方案来用于Windows服务(在.net 2.0中完成)。你能告诉我如何实现这样的目标或者给我一些链接吗?

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

如果您认为我应该坚持Dispatcher(。net 3.0)......我该如何操纵它(OnServiceStopOnServiceStart

编辑: 更多详情(另请参阅...... here

想法是我想在我的Windows服务中托管一些扩展/插件,这些扩展/插件可以通过方法ExecuteCommand(type, params)在彼此之间进行通信。

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

这就是Dispatcher发挥作用的原因。但我想在.net 2.0中有一些东西,或者你认为Dispatcher在我的情况下是好的吗?

感谢。

1 个答案:

答案 0 :(得分:2)

Windows服务没有Dispatcher(或Windows窗体中的消息循环)之类的内容。如果你想从一个线程编组到另一个线程,那么“目标”线程必须运行它自己的消息循环。

如果您可以告诉我们更多关于您要实现的目标的信息,那么可以更轻松地为您提供帮助。

编辑:好的,听起来基本上想要一个生产者/消费者队列:一个线程等待队列中存在某些东西,然后对其进行处理。生产者可以随时添加到队列中。

我的线程教程中有一个very simple implementation of a producer/consumer queue,但可能会有更高级的实现。 (.NET 4使这很容易,但在.NET 2中更难。)如果你采取我的实现,你会想要考虑使它成为通用的并添加终止条件。 Joe Albahari也有another implementation you should look at