在C#中进行过程间通信(IPC)的最简单方法是什么? [关闭]

问题描述 投票:0回答:6
我有两个C#应用程序,我希望其中一个将两个整数发送到另一个整数(这不必很快,因为它仅调用一次每隔几秒钟)。

最简单的方法是什么? (它不一定是最优雅的。)

c# ipc communication interprocess
6个回答
21
投票
IPCCHANNEL

(又称跨过程通信渠道);那就是它的目的。您可以使用几行代码和配置来启动并运行它。


6
投票
这是一个古老的答案,因此您很可能今天不想使用远程。 :)如果您想要.NET Framework解决方案,则仍然可以使用WCF,但是使用诸如MessagePipe

之类的开源库可能是一个更好的主意,更易于设置并且更快。 您可以尝试.NET远程。这是一个简单的示例:codeproject .net远程.

如果您使用的是.NET 3.5,则应该选择WCF,因为远程逐渐过时。同样,周围有许多
示例。

我创建了我自己的开源库,用于快速简便的IPC,它在Windows服务,控制台应用程序和Windows表单之间工作。 它比现有的IPC实现具有一些优势,并且不需要任何配置。

请参阅

Herey.


2
投票
其他方法是模仿命名的管道。在某个地方声明文件,然后从/写入它。

,或者,如果程序被顺序执行,则可以尝试剪贴板...但是该解决方案丑陋地狱,并且是越野车(有时.NET无缘无故地无法访问剪贴板)。

I创建了一个简单的类,该类使用IPCCHANNEL类进行间流程通信。 这是github的一刻。 服务器端代码:


1
投票

活动听众:

private void IpcClientServer_MessageReceived(object sender, MessageReceivedEventArgs e) { if (InvokeRequired) { Invoke(new MethodInvoker(delegate { textBox2.Text += e.Message + Environment.NewLine; })); } else { textBox2.Text += e.Message + Environment.NewLine; } }


1
投票

if (ipcClientServer == null) { ipcClientServer = new IpcClientServer(); ipcClientServer.CreateClient("localhost", 9090); } ipcClientServer.SendMessage(textBox1.Text);

注:需要引用系统。

我会说让他们在插座上说话。
在插座上有一个程序
listen

,将另一个程序带到第一个程序。 作为数字字符串,将两个整数发送到单行上。

唯一的问题是他们应该如何就端口号达成共识,以及他们如何知道他们彼此交谈。 他们可以通过您确定您的端口号码,决定他们应该始终使用端口12345(例如),而第二部分的肮脏 - 刺激措施就是相信您正在与您交谈的人成为一个好人。

完成完整性,您也可以使用

connect
net.pipe

如果您希望一个程序从另一个程序中获得的数据不多,那么您只能让一个程序在某处创建一个.txt文件,然后让另一个程序读取文本文件。

0
投票

我不是专业人士,但是看到具有流媒体的观察者设计模式

似乎是最理想的途径,但是在多线程应用程序中,它具有沉重负载的限制(您会得到太多的上下文开关)。

作为业余程序员,我发现XDMessging对我来说很容易和简单。  它在
nuget
中,因此也很容易安装。这是xdmessaging的

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.