У меня есть 2 процесса, которые я хочу включить многопоточную связь между ними.
Оба процесса являются STA, поскольку они содержат элемент управления веб-браузера (активный x).
Мой сценарий таков:
- Процесс 1: отправить сообщение процессу 2 и ждать возврата
- Процесс 2: отправить сообщение процессу 1 (не в качестве возвращаемого значения, другое сообщение)
- Процесс 1: вернуть результат для сообщения процесса 2
- Процесс 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