Межпроцессное многопоточное взаимодействие в WinForms (управление через веб-браузер) - PullRequest
0 голосов
/ 04 октября 2011

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

Оба процесса являются STA, поскольку они содержат элемент управления веб-браузера (активный x).

Мой сценарий таков:

  1. Процесс 1: отправить сообщение процессу 2 и ждать возврата
  2. Процесс 2: отправить сообщение процессу 1 (не в качестве возвращаемого значения, другое сообщение)
  3. Процесс 1: вернуть результат для сообщения процесса 2
  4. Процесс 2: вернуть результат для сообщения процесса 1

Когда я пытаюсь выполнить шаг 2, процесс 2 зависает, потому чтоосновной поток процесса 1 ожидает результата.

Я использую именованные каналы для связи, но я открыт для любого другого метода связи («реального» общения, а не разделяемой памяти).Что я ищу, так это то, что новый процесс будет открыт в процессе 1, когда основной поток (или любой другой поток) ожидает ответа.

Мне нужно использовать основной поток, чтобы выполнить вызов, потому чтоПервоначально он был инициирован из элемента управления веб-браузера (используя «объект для сценариев»).

Если есть способ «переместить» стек вызовов основного потока в другой поток (а затем вернуть его в основной поток для связи с веб-браузером), это будет возможным решением.

Вы можете найти мой пример кода здесь (VS 2010): http://www.filedropper.com/interprocesscomunicationusingwithwebbrowser

Отладка этой ситуации может быть сложной.Вам нужно запустить InterProcessComunicationUsingWithWebBrowser2 перед тем, как запустить InterProcessComunicationUsingWithWebBrowser, затем поставить точку останова в строке 40 (return Sender.SendMessage(ProcessNamedPipes.Process2, "hello") + Guid.NewGuid().ToString("n");) в Form1.cs

1 Ответ

0 голосов
/ 18 октября 2011

Я нашел решение!я изменил приложение на MTA и создал форму браузера в новой ветке STA

...