我有两个C#应用程序,我希望其中一个发送两个整数到另一个(这不一定很快,因为它每隔几秒只调用一次)。
最简单的方法是什么? (它不一定是最优雅的。)
答案 0 :(得分:18)
最简单,最可靠的方式几乎可以肯定IpcChannel(a.k.a. Inter Process Communication Channel);这就是它的用途。您可以使用几行代码和配置来启动和运行。
答案 1 :(得分:5)
您可以尝试.NET Remoting。这是一个简单的例子:CodeProject .NET Remoting。
如果您使用的是.NET 3.5,那么您应该选择WCF,因为Remoting正逐渐过时。同样,周围有很多examples for WCF。
答案 2 :(得分:2)
答案 3 :(得分:0)
我会说让他们通过套接字说话。
在套接字上放置一个程序listen
,并将另一个connect
放在第一个上。将两个整数作为数字串发送到一行。
唯一的问题是他们应该如何就港口号码达成一致,以及他们如何知道他们正在互相交谈。他们可以通过判断他们应该总是使用端口12345(比如说)来同意端口号,而第二部分的脏兮兮的解决办法就是只相信你和谁说话是个好人。
答案 4 :(得分:0)
另一种方法是模仿命名管道。在某处声明一个文件,并从中读取/写入它。
或者,如果程序按顺序执行,你可以尝试剪贴板......但是这个解决方案很丑陋而且很麻烦(有时.NET无法无缘无故地访问剪贴板)。
答案 5 :(得分:0)
为了完整起见,您还可以使用net.pipe
和WCF
。
答案 6 :(得分:0)
我创建了一个简单的类,该类使用IpcChannel类进行进程间通信。 这是指向Gist at GitHub的链接。
服务器端代码:
IpcClientServer ipcClientServer = new IpcClientServer();
ipcClientServer.CreateServer("localhost", 9090);
IpcClientServer.RemoteMessage.MessageReceived += IpcClientServer_MessageReceived;
事件监听器:
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;
}
}
客户:
if (ipcClientServer == null)
{
ipcClientServer = new IpcClientServer();
ipcClientServer.CreateClient("localhost", 9090);
}
ipcClientServer.SendMessage(textBox1.Text);
注意:必须引用System.Runtime.Remoting。
答案 7 :(得分:0)
我不是专业人士,但是看到采用StreamInsight的观察器设计模式似乎是最理想的途径,但是在多线程应用程序中,由于负担很重,因此存在局限性(您会获得太多的上下文切换)。
作为一名业余程序员,我发现XDMessaging对我来说很容易。 NuGet也是如此易于安装,网站为XDMessaging
答案 8 :(得分:0)
如果您不希望一个程序从另一个程序获取那么多数据,您可以让一个程序在某处创建一个 .txt 文件,然后让另一个程序读取该文本文件。它也有局限性,比如它们不能同时读/写,这需要一些尝试/捕捉来修复。不是最专业的方式,但它完全有效。