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

Tom*_*fka 10 c# multithreading

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

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

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

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

谢谢你的启发:)!

Mic*_*ael 10

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

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

  • 答案是正确的,但为了清楚,它是一个发送的窗口消息,因此当UI线程消息泵运行时,它将获取消息并处理它. (2认同)
  • 谢谢你们两个 - 所以当目标线程忙时,只有在线程完成处理并开始处理消息后才能调用该方法.对此的方法是在一些有效负载中具有委托参数的Windows消息.谢谢,我试着谷歌答案,但到处都是'只需添加调用,你会很好'教程只... (2认同)