Как работает Invoke? Не имеет ли поток только 1 указатель инструкции?

Я хотел бы знать, как возможно, что функция С# Invoke может работать (теперь я рассматриваю вызов из рабочего потока для вызова метода, который управляет графическим интерфейсом из потока графического интерфейса):

Предположим, у меня есть два потока, и каждый из них имеет указатель на указатель, указывая на исполняемую команду.

Теперь я вызываю Invoke в рабочем потоке для запуска делегата в потоке графического интерфейса. Как это возможно, когда в потоке GUI уже есть указатель на указатель (IP), и каждый поток может иметь только один? Что происходит с этим IP-адресом, когда я неожиданно вызываю свой код? И как это делается, когда поток GUI может впоследствии продолжать то, что он делал (его прежний IP-сервер каким-то образом восстановлен)?

Обобщение этого вопроса заключается в том, как это делается, когда я хочу вызвать функцию f() из потока 1 таким образом, что f() выполняется в контексте некоторого другого потока...

Спасибо за просвещение:)!

Ответ 1

Он отправляет сообщение Window в целевой поток. Поток должен находиться в цикле сообщений для работы Invoke. Когда поток получает сообщение, он вызывает делегата.

Никаких изменений IP-перекрестных потоков не требуется - на самом деле изменение IP-адреса почти наверняка приведет к краху целевого потока.