2011-01-31 54 views
2

我无法找到一个C#示例,说明如何提高在以下条件的跨线程事件:提高2个线程之间的事件,当两个线程是一个WinForm

比方说,我有1事件及3主题:

事件DoStuff

线程A - WinForm的

线程B - 线程线程A催生做一些处理。已被预订DoStuff

线程C-函数foo() - 线程,线程B催生做一些定子处理和引发事件DoStuff现在

如何确保线程C-引发的事件被处理线程B内部而不是C或A.

我运行的所有示例都是针对Form/Control.Invloke提示的,或者是那种类型的东西,我真的想要拥有任何Thread实际订阅的事件执行它是重要的线程内部,而不仅仅是主窗体线程。

+0

为什么使用事件而不是仅加入或使用工作线程池? – JohnOpincar 2011-01-31 17:10:05

+0

线程不处理事件,方法。也许你可以解释一下你需要什么,有人可以提出一个替代方案。 – 2011-01-31 17:23:47

回答

4

从一个线程处理一个调用具体的其他线程是非常平凡的。不可能任意中断线程并使其执行一些代码。这会导致可怕的重入问题。试图用信号量来防止这种情况将会导致死锁。

目标线程必须合作,它必须是“空闲”的,并且不会主动地改变程序的状态。一个常见的机制是线程安全的队列。事件提升线程将请求放入队列中,目标线程需要一个循环来读取队列中的请求并执行它们。也许这听起来很熟悉,是的,这就是程序的UI线程工作的方式。