我需要在C#应用程序之间实现进程间通信。我决定使用命名管道并编写以下代码:
服务器
while (true)
{
using (var server = new NamedPipeServerStream("some_pipe"))
{
server.WaitForConnection();
using (var reader = new StreamReader(server))
{
string line = reader.ReadLine();
MessageBox.Show(line);
}
}
}
客户端
using (var client = new NamedPipeClientStream("some_pipe"))
{
client.Connect();
using (var writer = new StreamWriter(client))
{
writer.AutoFlush = true;
writer.WriteLine(path);
client.WaitForPipeDrain();
}
}
我有以下问题:
NamedPipeServerStream
类的实例吗?如果我从while (true)
循环移动它的结构,它会给我一个例外"无法访问一个封闭的管道"。我怎么能避免呢?如果我无法避免它并且每次都应该重新创建此对象,那么当客户端尝试连接它时,如果没有NamedPipeServerStream
会发生什么?答案 0 :(得分:3)
这不起作用。连接到一个NamedPipeServerStream的多个客户端是不可用的功能。它的名字是" ... ServerStream"是误导。管道是1对1连接。对于许多客户端,您必须为多个服务器实例提供相同的管道。 This Code Project shows how to implement a Server Pipes and may help you。