繁体   English   中英

同一个盒子上的进程间通信 - 两个应用程序或进程之间的通信

[英]Interprocess communication on the same box - communication between 2 applications or processes

在同一个盒子上的应用程序之间实现进程间通信的最佳方法是什么 - 都是用c#编写的?

管理器应用程序将发送命令,例如:停止,启动到其他应用程序。 它还将监视应用程序并可能要求数据。

所有应用程序都将在Windows 7操作系统上运行的同一台机器上运行。

IPC Channel是一个不错的选择吗? 被命名为Pipes更好的选择? 或者套接字是更好的选择吗?

正在管理的应用程序都具有相同的名称。 当它们启动时,它们会加载一个dll来确定运行哪些算法。

谢谢

将其缩小,将WCF与命名管道一起使用。

关于这个问题,这里有一些关于它的链接: .NET进程间通信的最佳选择是什么?

一种方法,特别是如果你想在不同的进程之间进行通信,使用MemoryMappedFile分离出同一个应用程序。 这是最简单的示例 - 将其放入控制台应用程序。 启动它的2个实例并快速连续输入w+enter一个, r+enter另一个。 看。 注 - 我对读取和写入时序进行了解除同步,以便您可以看到有时数据发生变化而其他时间 - 而不是

class Program
{
    private static MemoryMappedFile _file = MemoryMappedFile.CreateOrOpen("XXX_YYY", 1, MemoryMappedFileAccess.ReadWrite);
    private static MemoryMappedViewAccessor _view = _file.CreateViewAccessor();

    static void Main(string[] args)
    {
        askforinput:
        Console.WriteLine("R for read, W for write");
        string input = Console.ReadLine();

        if (string.Equals(input, "r", StringComparison.InvariantCultureIgnoreCase))
            StartReading();
        else if (string.Equals(input, "w", StringComparison.InvariantCultureIgnoreCase))
            StartWriting();
        else
            goto askforinput;


        _view.Dispose();
        _file.Dispose();   

    }

    private static void StartReading()
    {

        bool currVal = false;

        for (int i = 0; i < 100; i++)
        {
            currVal = currVal != true;
            Console.WriteLine(_view.ReadBoolean(0));
            Thread.Sleep(221);
        }
    }

    private static void StartWriting()
    {

        bool currVal = false;

        for (int i = 0; i < 100; i++)
        {
            currVal = currVal != true;
            _view.Write(0, currVal);
            Console.WriteLine("Writen: " + currVal.ToString());
            Thread.Sleep(500);
        }
    }
}

同样,您可以使用内存映射文件构建非常复杂和强大的通信层。 这只是一个简单的例子。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM