Как работает Invoke? Разве поток не имеет только 1 указатель инструкции? - PullRequest
10 голосов
/ 21 апреля 2009

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

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

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

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

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

1 Ответ

10 голосов
/ 21 апреля 2009

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...