同一台电脑上的进程间通信 - 2个应用程序或进程之间的通信

4
什么是在同一台电脑上实现应用程序间通信的最佳方法 - 都是用c#编写的?
管理应用程序将发送命令,如:停止、启动到其他应用程序。它还将监视应用程序,并可能请求数据。
所有应用程序都在运行Windows 7操作系统的同一台机器上。
IPC通道是一个好选择吗?命名管道是更好的选择吗?还是套接字更好?
被管理的应用程序都有相同的名称。当它们启动时,它们会加载决定运行哪些算法的dll。
谢谢
2个回答

7

1

如果您想在同一应用程序中的不同进程之间通信,特别是涉及编程方面的内容,可以使用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);
        }
    }
}

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接