WinForms中的进程间多线程通信(Web浏览器控件)
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了WinForms中的进程间多线程通信(Web浏览器控件)相关的知识,希望对你有一定的参考价值。
我有2个进程,我想在它们之间启用多线程通信。
这两个进程都是STA,因为它们包含Web浏览器控件(活动x)。
我的情况是这样的:
- 过程1:向过程2发送消息并等待返回
- 过程2:向进程1发送消息(不作为返回值,不同的消息)
- 过程1:返回过程2消息的结果
- 过程2:返回过程1消息的结果
当我尝试执行第2步时,进程2挂起,因为进程1主线程等待结果。
我正在使用命名管道进行通信,但我对任何其他通信方法(“真实”通信,而不是共享内存)持开放态度。我正在寻找的是当主线程(或任何其他线程)等待响应时,在进程1中将打开一个新线程。
我必须使用主线程来执行调用,因为它最初是从Web浏览器控件启动的(使用“脚本对象”)。
如果有一种方法可以将主线程的调用堆栈“移动”到另一个线程(然后将其返回到主线程以与Web浏览器通信),那么这将是一种可能的解决方案。
你可以在这里找到我的代码示例(VS 2010):http://www.filedropper.com/interprocesscomunicationusingwithwebbrowser
调试这种情况可能很棘手。你需要在运行InterProcessComunicationUsingWithWebBrowser2
之前运行InterProcessComunicationUsingWithWebBrowser
,然后在return Sender.SendMessage(ProcessNamedPipes.Process2, "hello") + Guid.NewGuid().ToString("n");
的第40行(Form1.cs
)中设置一个断点
我找到了解决方案!我将应用程序更改为MTA并在新的STA线程中创建了浏览器表单
以上是关于WinForms中的进程间多线程通信(Web浏览器控件)的主要内容,如果未能解决你的问题,请参考以下文章