WinForms中的进程间多线程通信(web浏览器控件)

WinForms中的进程间多线程通信(web浏览器控件),winforms,ipc,Winforms,Ipc,我有两个进程,我想在它们之间启用多线程通信 这两个进程都是STA,因为它们包含一个web浏览器控件active x 我的设想是: 进程1:向进程2发送消息并等待返回 进程2:向进程1发送一条消息,不作为返回值,另一条消息 进程1:返回进程2消息的结果 流程2:返回流程1消息的结果 当我尝试执行步骤2时,进程2挂起,因为进程1主线程正在等待结果 我使用命名管道进行通信,但我愿意使用任何其他通信方法—真正的通信,而不是共享内存。 我要寻找的是,当主线程或任何其他线程等待响应时,进程1中将打开一个新线

我有两个进程,我想在它们之间启用多线程通信

这两个进程都是STA,因为它们包含一个web浏览器控件active x

我的设想是:

进程1:向进程2发送消息并等待返回 进程2:向进程1发送一条消息,不作为返回值,另一条消息 进程1:返回进程2消息的结果 流程2:返回流程1消息的结果 当我尝试执行步骤2时,进程2挂起,因为进程1主线程正在等待结果

我使用命名管道进行通信,但我愿意使用任何其他通信方法—真正的通信,而不是共享内存。 我要寻找的是,当主线程或任何其他线程等待响应时,进程1中将打开一个新线程

我必须使用主线程来执行调用,因为它最初是从使用对象进行脚本编写的web浏览器控件启动的

如果有办法将主线程的调用堆栈移动到另一个线程,然后将其返回到主线程以与web浏览器通信,那么这将是一个可能的解决方案

您可以在这里找到我的代码示例VS 2010:


调试这种情况可能很棘手。在使用WebBrowser运行进程间通信之前,需要先使用WebBrowser运行进程间通信2,然后在第40行中放置一个断点,返回Sender.SendMessageProcessNamedPipes.Process2,hello+Guid.NewGuid.ToString;在Form1.cs中,我找到了一个解决方案!我将应用程序更改为MTA,并在新的STA线程中创建了浏览器窗体

阻止UI线程是非法的。比如说,在回调中使用PipeStream.BeginRead和Control.BeginInvoke