您好我对使用命名管道有几个问题。
首先,当我尝试设置管道服务器时,我注意到如果我使用下面的代码..在第一个客户端连接的末尾连接服务器变得不可用除非我将整个事物包裹在一会儿(真)块中。我这样做了吗?或者每个服务器只应该激活一次然后死掉?
using (NamedPipeServerStream pipeServerStream = new NamedPipeServerStream(pipeName, PipeDirection.In, 1, transmissionMode))
{
pipeServerStream.WaitForConnection();
using (StreamReader sr = new StreamReader(pipeServerStream))
{
string message = null;
do
{
message = sr.ReadLine();
OnPipeCommunicationHandler(new IPCData() { Data = message });
}
while (message != null);
}
}
其次,我还必须在自己的线程上剥离服务器 - 如果我不这样做,我的应用程序将无法使用。这是正常的吗?我做得对吗?我以为我读到了某个地方,在引擎盖下,namedpipeserverstream为自己创建了自己的线程,但我看不到那种情况..
谢谢!
答案 0 :(得分:3)
是的,对于命名管道,您需要为下一个能够连接的客户端创建服务器的新实例。通常所做的事情(至少在同步编程中)是等待连接然后产生一个新线程来处理客户端,原始线程循环回来创建一个新服务器。
至于线程,即使对象在幕后创建一个线程(我怀疑),它也无法解决你编写的代码是同步的事实,因此无论如何都需要在自己的线程中。