当两个线程都不是WinForm时,在两个线程之间引发事件

我找不到ac#example,它显示了如何在以下条件中引发跨线程事件:

假设我有1个事件和3个线程:

事件DoStuff

线程A – WinForm

线程B – 从线程A产生的线程进行一些处理。 具有订阅DoStuff的Function Foo()

线程C – 从线程B产生的线程进行一些子处理和引发事件DoStuff

现在,我如何确保在线程C中引发的事件是在线程B内而不是C或A中处理的。

我运行的所有示例都提示向Form / Control.Invloke,或者那种类型的东西,我真的想要拥有实际订阅事件的任何线程在它的repsective线程内执行,而不仅仅是主表单线程。

将来自一个线程的调用编组到特定的其他线程是非常不重要的。 不可能任意中断线程并使其执行某些代码。 这导致了可怕的重新入侵问题。 试图用信号量来防止这种情况,保证会导致死锁。

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