嗨,我有几个有关使用命名管道的问题.
首先,当尝试设置管道服务器时,我已经注意到,如果我使用下面的代码,则在第一个客户端连接结束时,服务器将不可用,除非我将整个内容包装在一会儿(true)块中.我做对了吗?还是每个服务器仅应激活一次然后死亡?
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在其内部创建了自己的线程,但是我看不到是这种情况.
谢谢!
解决方法:
是的,对于命名管道,您需要创建服务器的新实例,以便下一个客户端能够连接.通常要做的事情(至少在同步编程中)是等待连接,然后生成一个新线程来处理客户端,而原始线程将循环返回以创建新服务器.
至于线程,即使对象在后台创建了线程(我对此表示怀疑),也无法避免您编写的代码是同步的,因此无论如何都需要在其自己的线程中运行.