我有2个进程,我想在它们之间启用多线程通信。
这两个进程都是STA,因为它们包含Web浏览器控件(活动x)。
我的情况是:
当我尝试执行第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");
Form1.cs
)中设置一个断点
答案 0 :(得分:0)
我找到了解决方案!我将应用程序更改为MTA并在新的STA线程中创建了浏览器表单