当有多个实例时如何与.net进程通信

Posted

技术标签:

【中文标题】当有多个实例时如何与.net进程通信【英文标题】:How to communicate with .net processes when there are multiple instances of them 【发布时间】:2010-02-03 13:13:30 【问题描述】:

我在同一台机器上运行相同的 Windows Forms .net 3.5 SP1 C# 应用程序的多个实例。

现在我希望能够通过 .net 与他们进行通信,一次一个实例。 最简单的方法是什么?

我阅读了一些关于 WCF 的信息,但我只找到了使用一台服务器和一台客户端的示例。但在我的情况下,所有正在运行的实例都是服务器,我只需要与其中一个进行讨论。

我想像这样:

Process[] procs = Process.GetProcessesByName("ProcessName");
foreach (Process p in procs)

  // Communicate with process here

【问题讨论】:

【参考方案1】:

您需要某种订阅/回调机制。不要遍历项目,而是让每个应用程序订阅一个 wcf 服务方法。

示例:http://idunno.org/archive/2008/05/29/wcf-callbacks-a-beginners-guide.aspx

【讨论】:

@Gerrie Schenck:这是个好主意。然而,这意味着我仍然需要 1 个单独的进程,我确信它只启动了一次。理想情况下,我希望在同一个应用程序中完成所有工作。 那么您可能不需要 WCF,而只需一个控制器,其中包含表单可以订阅的事件。 好的,但是应该怎么做呢?每个进程都有自己的控制器,因此不会有任何进程间通信。我想我会尝试采纳您的建议并实施一个单独的进程作为服务器。因此,每次进程启动时,它都会尝试订阅服务器进程,如果此进程不可用,它将启动一个新进程并随后注册。【参考方案2】:

简单的事情是数据库:),顺便说一句,WCF 支持与 NetPeerTcpBinding 的点对点通信

【讨论】:

以上是关于当有多个实例时如何与.net进程通信的主要内容,如果未能解决你的问题,请参考以下文章

进程与进程间通信

为啥与多个 Popen 子进程一起使用时会出现通信死锁?

.Net 进程间通信

Socket通信实例(C#)

超详细的Socket通信原理和实例讲解

Linux进程间通信实例(pipeshared memorysocket)