【发布时间】:2013-06-01 13:30:14
【问题描述】:
我是 C# 中的事件处理和线程的新手,如果这个问题是基本的,请原谅我:如何创建多个类以在不同的线程上运行,所有类都侦听相同的事件?
例如,我经常收到一条新数据,但时间间隔是随机的。当这些数据到达时,我用新数据更新一个类,我们称之为MyDataClass,它会引发一个事件:MyDataClass.NewEvent。
然后我有一个名为NewEventHandler 的类。当事件触发时,该类对新数据进行一些计算,然后将结果发送到另一个应用程序。
所以问题是这样的:
我需要有大约 30 个 NewEventHandler 实例都在听 MyDataClass.NewEvent (每个都进行不同的计算并产生不同的结果)。重要的是,这些计算都同时运行 - 一旦事件触发所有 30 个 NewEventHandler 实例开始计算。但是,它们是否一起完成并不重要(例如,这里不需要同步)。
我如何实际创建NewEventHandler 的实例,以便它们在不同的线程上运行,并让它们都监听MyDataClass.NewEvent 的单个实例?
【问题讨论】:
-
它可能是重复的,但我喜欢这个问题的抽象性质。 “多个线程等待一个事件?”具体阅读了那个 OP 域问题。我希望这个问题能得到自己的回答。
-
@Eric 问题是不同的 - 这个问题是关于处理 C# 样式事件(委托),建议的问题是关于阻止操作系统事件的同步。
-
请注意,类的实例不会“在不同的线程上运行”,它们根本不会运行。只有特定的方法(或者在
async/await代码的情况下甚至是方法的一部分)可以说“在线程上运行”。 -
我要指出,事件(正如问题所提出的那样)实际上是在触发它的同一线程上调用的委托,因此另一个线程并没有真正监听事件.最简单的方法是设置 ManualResetEvent 而不是触发 C# 事件。
标签: c# multithreading events