在C#中进行进程间通信的最简单方法是什么?

问题描述 投票:14回答:8

我有两个C#应用程序,我希望其中一个发送两个整数到另一个(这不一定很快,因为它每隔几秒只调用一次)。

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

c# ipc communication interprocess
8个回答
18
投票

最简单和最可靠的方式几乎肯定是IpcChannel(a.k.a. Inter Process Communication Channel);这就是它的用途。您可以使用几行代码和配置来启动和运行它。


5
投票

您可以尝试.NET Remoting。这是一个简单的例子:CodeProject .NET Remoting

如果您使用的是.NET 3.5,那么您应该选择WCF,因为Remoting正在逐渐过时。再次,周围有许多examples for WCF


2
投票

我已经创建了自己的开源库,用于快速简便的IPC,可以在Windows服务,控制台应用程序和Windows窗体之间工作。

它具有优于现有IPC实现的一些优点,并且不需要任何配置。

here


0
投票

我会说让他们通过套接字说话。

在套接字上有一个程序listen,并且第一个有另一个connect。将两个整数发送到一行,作为数字串。

唯一的问题是他们应该如何就港口号码达成一致,以及他们如何知道他们正在互相交谈。他们可以通过你决定他们应该总是使用端口12345(比如说)来同意端口号码,而第二部分的脏兮兮的解决办法就是只相信你和谁说话是个好人。


0
投票

另一种方法是模仿命名管道。在某处声明一个文件,并从中读取/写入它。

或者,如果程序按顺序执行,你可以尝试剪贴板......但是这个解决方案很丑陋而且有问题(有时.NET无法无缘无故地访问剪贴板)。


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。


0
投票

为了完整起见,您还可以使用net.pipeWCF


0
投票

我不是专业人士,但看到使用StreamInsight的观察者设计模式似乎是最理想的途径,但是在多线程应用程序中有很多负载(你会得到太多的上下文切换)。

作为业余程序员,我发现XDMessaging对我来说简单易行。它在NuGet中也很容易安装,网站是XDMessaging

© www.soinside.com 2019 - 2024. All rights reserved.