C# 订阅同一事件的多个线程

C# 订阅同一事件的多个线程,c#,events,C#,Events,当10个线程订阅同一事件并触发该事件时,会发生什么情况? 哪根线会把它接起来 线程不订阅事件,对象订阅。当事件触发时,所有已注册的处理程序都在同一线程(引发事件的线程)上执行。没有用于在多个线程上触发事件的内置工具 如果需要,处理程序可以选择将事件信息转发到单独的线程,但这不是内置的事件分派机制的一部分。我认为您这里的意思是,单独线程上的多个对象订阅了一个事件 所有处理程序都将被调用,但调用该事件的线程相同。我猜您的问题的答案是,这取决于事件调度程序的实现。。。通常,您使用一个列表来跟踪订阅特定

当10个线程订阅同一事件并触发该事件时,会发生什么情况?
哪根线会把它接起来

线程不订阅事件,对象订阅。当事件触发时,所有已注册的处理程序都在同一线程(引发事件的线程)上执行。没有用于在多个线程上触发事件的内置工具


如果需要,处理程序可以选择将事件信息转发到单独的线程,但这不是内置的事件分派机制的一部分。

我认为您这里的意思是,单独线程上的多个对象订阅了一个事件


所有处理程序都将被调用,但调用该事件的线程相同。

我猜您的问题的答案是,这取决于事件调度程序的实现。。。通常,您使用一个列表来跟踪订阅特定事件的所有事件处理程序,因此在这种实现中,最有可能触发的第一个处理程序是订阅的第一个事件处理程序如果您当然同步调用所有相关过程,如果不同步,则取决于。。。只是想一想。

如果您想知道哪个对象将拾取事件,订阅事件的每个对象都将拾取该事件,但每个对象都将在事件发生的线程上运行


如果您想知道哪个对象将首先拾取该事件,请参阅ultrajohns的答案。

我想如果我理解您的问题。您的意思是要求您的对象公开一个用户可以订阅的事件。如果对象的10个不同用户订阅了此事件,并且在某个时候触发了该事件,那么调用事件处理程序的顺序(或同时)是什么


Answer:由于事件处理程序执行发生在触发它的同一线程上(在本例中为对象的处理线程),因此一次只能处理一个处理程序函数。订单不受保证(这意味着不一定第一个订户将首先执行,最后一个订户将最后执行)。我希望这能回答你的问题。底线是,所有10个处理程序都将被调用,而没有一个是并行的。他们将一个接一个地被处决。我曾看到人们意外地订阅了两次save event,然后又看到该操作发生了两次,很难弄清楚为什么有些事情会发生多次

如果“事件”是指Win32同步事件(我就是这样理解这个问题的),那么它取决于EventWaitHandle是如何创建的。如果手动重置,事件将向所有线程发出信号,所有线程都将执行。如果它自动重置,将发出信号并执行单个线程。您可以选择等待事件的10个线程中的任意一个。

线程是什么意思?线程如何订阅事件?我想你的意思是不同的…10个线程执行相同的方法,订阅一个事件。这个问题有点混乱,或者可能没有正确理解。如果事件是一个Windows事件(即,由CreateEvent创建),并且多个线程正在等待发出信号,那么Scottx的回答似乎是正确的。如果事件是应用程序框架的事件(类似于Delphi或按钮的C#OnClick事件),那么许多答案可能是正确的!(但话说回来,多个线程如何订阅一个应用程序事件?!!)。尽管这是一个老问题,但这条消息的目的是给读者一个提示。如果您想要一个更异步的事件视图,您可以签出。使用Rx,将事件封送到特定线程非常容易(当然,假设它具有要封送到的
SynchronizationContext
)。线程是CPU和操作系统提供给你的东西,它是一个执行路径,一个执行上下文。您可以通过对象访问与这些线程相关的详细信息,但说“线程就是对象”是错误的。:),ehehe我明白您的意思,但在java中,您可以创建线程对象…:)nvm,…)@你也可以在c#中这样做,但这与事件无关。