gpt4 book ai didi

c# - Invoke 在底层是如何工作的?线程不是只有 1 个指令指针吗?

转载 作者:可可西里 更新时间:2023-11-01 09:08:41 26 4
gpt4 key购买 nike

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

假设我有两个线程,每个线程都有自己的指令指针,指向当前正在执行的一条指令。

现在,我在工作线程中调用 Invoke 以在 GUI 线程中运行委托(delegate)。当一个 GUI 线程已经有了它的指令指针 (IP),而每个线程只能有一个时,这怎么可能呢?当我突然调用我的代码时,那个 IP 会发生什么?以及如何使 GUI 线程之后可以继续它正在做的任何事情(它以前的 IP 是否以某种方式恢复了)?

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

谢谢指教:)!

最佳答案

它向目标线程发送一个窗口消息。线程必须处于消息循环中才能使 Invoke 工作。当线程收到消息时,它会调用委托(delegate)。

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

关于c# - Invoke 在底层是如何工作的?线程不是只有 1 个指令指针吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/770497/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com