如果线程侦听事件并且线程已中止事件发生了什么?

时间:2011-10-25 10:43:02

标签: .net c#-4.0

假设一个线程订阅了一个事件并且线程已经中止。但目标仍然存在。那么现在发生的事件会发生什么?

例如:假设我正在侦听Process.Exited事件,并且已经中止了订阅该事件的线程。 CLR如何通知我的申请?


感谢您的快速回复。我理解该事件将在发布者举起活动的主题上提出。当它来自我的项目时,我可以清楚地理解/验证它。但是,如果我订阅其他人怎么办?例如:Process.Exited,我无法控制。


答案:

当SynchronizingObject为Nothing时,将在系统线程池的线程上调用处理Exited事件的方法。有关系统线程池的更多信息,请参阅ThreadPool。

汉斯指出我们将在线程池线程上调用它。

非常感谢。 Stackoverflow摇滚!!, 问候, 梦想家。

4 个答案:

答案 0 :(得分:3)

线程不订阅活动。事件处理程序附加到事件。由事件发布者决定这些事件的引发线程。

线程和事件几乎总是正交的 - 事件发布者通常只是在“自然”注意到逻辑事件发生的任何线程上调用事件处理程序(例如UI事件的UI线程)。

答案 1 :(得分:0)

从引发事件的线程调用事件处理程序。哪个线程订阅了一个事件并不重要。

答案 2 :(得分:0)

你尝试过吗?订阅对象(由事件委托引用)只停留在堆上(不是垃圾收集),直到事件被主动分离(例如,事件源被垃圾收集)

其他人已经指出

编辑,无论如何都会在引发事件的任何线程上调用该事件。

答案 3 :(得分:0)

根据http://msdn.microsoft.com/en-us/library/ms366768(v=vs.80).aspx,通过订阅事件,您正在编写在调用事件时执行的自定义代码(可能在调用事件的同一线程中)。如果您希望应用程序不再侦听该事件,则应取消订阅事件处理程序,如链接的msdn页面中所述。