【发布时间】:2011-01-31 16:30:39
【问题描述】:
我无法找到一个展示如何在以下情况下引发跨线程事件的 c# 示例:
假设我有 1 个事件和 3 个线程:
事件处理
线程 A - WinForm
线程 B - 从线程 A 产生的线程进行一些处理。具有订阅 DoStuff 的函数 Foo()
线程 C - 从线程 B 产生的线程执行一些子处理并引发事件 DoStuff
现在我如何确保线程 C 中引发的事件在线程 B 内部而不是 C 或 A 内部处理。
我运行的所有示例都指向 Form/Control.Invloke 或类似的东西,我真的希望让实际订阅事件的任何线程在其对应线程内执行,而不仅仅是主窗体线程。
【问题讨论】:
-
为什么要使用事件而不是仅仅加入或使用工作线程池?
-
线程不处理事件,方法处理。也许解释一下你需要这个做什么,有人可以想出一个替代方案。
-
我正在构建一个类,该类可能会或可能不会在产生线程的 WinForm(可能是控制台应用程序)中使用。在那个线程中,我想引发一个似乎来自实例化类的线程的事件。我只是对这个问题采取了一种更通用的方法,看看事件的订阅是否知道订阅来自哪个线程,以及是否有某种方式我不知道在原始线程中执行订阅的委托。在汉斯的回应之后,为什么没有消息泵线程这是不合理的,这是完全有道理的。
标签: c# multithreading events delegates