Invoke如何在下面工作? 线程只有1个指令指针吗?

我想知道C#Invoke函数是如何工作的(我正在考虑从工作线程调用一个从GUI线程调用GUI的方法):

假设我有两个线程,每个线程都有它的指针指针,指向当前执行的指令。

现在,我在工作线程中调用Invoke来在GUI线程中运行委托。 当GUI线程已经拥有它的指令指针(IP),并且每个线程只能有一个时,这怎么可能? 当我突然调用我的代码时,该IP会发生什么? 那么如何使GUI线程继续处理它正在做的事情(它的以前的IP以某种方式恢复)?

这个问题的概括是,当我想从线程1调用函数f()时,如何在一些其他线程的上下文中执行f()…

谢谢你的启示:)!

它向目标线程发送一条Window消息。 该线程必须位于消息循环中才能使Invoke工作。 当线程获得消息时,它会调用委托。

不需要跨线程IP更改 – 实际上,更改IP几乎肯定会使目标线程崩溃。