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

时间:2011-10-04 14:28:17

标签: winforms ipc

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

这两个进程都是STA,因为它们包含Web浏览器控件(活动x)。

我的情况是:

  1. 流程1:向流程2发送消息并等待退货
  2. 流程2:向流程1发送消息(不是返回值,不同的消息)
  3. 流程1:返回流程2消息的结果
  4. 流程2:返回流程1消息的结果
  5. 当我尝试执行第2步时,进程2挂起,因为进程1主线程正在等待结果。

    我正在使用命名管道进行通信,但我对任何其他通信方法(“真实”通信,而不是共享内存)持开放态度。 我正在寻找的是当主线程(或任何其他线程)等待响应时,在进程1中将打开一个新线程。

    我必须使用主线程来执行调用,因为它最初是从Web浏览器控件启动的(使用“object for scripting”)。

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

    你可以在这里找到我的代码示例(VS 2010): http://www.filedropper.com/interprocesscomunicationusingwithwebbrowser

    调试这种情况可能很棘手。您需要在运行InterProcessComunicationUsingWithWebBrowser2之前运行InterProcessComunicationUsingWithWebBrowser,然后在return Sender.SendMessage(ProcessNamedPipes.Process2, "hello") + Guid.NewGuid().ToString("n");

    中的第40行(Form1.cs)中设置一个断点

1 个答案:

答案 0 :(得分:0)

我找到了解决方案!我将应用程序更改为MTA并在新的STA线程中创建了浏览器表单