假设一个线程订阅了一个事件并且线程已经中止。但目标仍然存在。那么现在发生的事件会发生什么?
例如:假设我正在侦听Process.Exited事件,并且已经中止了订阅该事件的线程。 CLR如何通知我的申请?
感谢您的快速回复。我理解该事件将在发布者举起活动的主题上提出。当它来自我的项目时,我可以清楚地理解/验证它。但是,如果我订阅其他人怎么办?例如:Process.Exited,我无法控制。
答案:
当SynchronizingObject为Nothing时,将在系统线程池的线程上调用处理Exited事件的方法。有关系统线程池的更多信息,请参阅ThreadPool。
汉斯指出我们将在线程池线程上调用它。
非常感谢。 Stackoverflow摇滚!!, 问候, 梦想家。
答案 0 :(得分:3)
线程不订阅活动。事件处理程序附加到事件。由事件发布者决定这些事件的引发线程。
线程和事件几乎总是正交的 - 事件发布者通常只是在“自然”注意到逻辑事件发生的任何线程上调用事件处理程序(例如UI事件的UI线程)。
答案 1 :(得分:0)
从引发事件的线程调用事件处理程序。哪个线程订阅了一个事件并不重要。
答案 2 :(得分:0)
编辑,无论如何都会在引发事件的任何线程上调用该事件。
答案 3 :(得分:0)
根据http://msdn.microsoft.com/en-us/library/ms366768(v=vs.80).aspx,通过订阅事件,您正在编写在调用事件时执行的自定义代码(可能在调用事件的同一线程中)。如果您希望应用程序不再侦听该事件,则应取消订阅事件处理程序,如链接的msdn页面中所述。