[英]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.