4

嗨,我有几个关于使用命名管道的问题。

首先,当尝试设置管道服务器时,我注意到如果我使用下面的代码.. 在第一个客户端连接结束时,服务器将变得不可用,除非我将整个事情包装在一段时间(真)块中。我做对了吗?还是每个服务器只应该激活一次然后死掉?

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 为自己创建了自己的线程,但我看不出是这种情况。

谢谢!

4

1 回答 1

3

是的,对于命名管道,您需要创建一个新的服务器实例,以便下一个客户端能够连接。通常所做的(至少在同步编程中)是等待连接然后产生一个新线程来处理客户端,原始线程循环返回以创建一个新服务器。

至于线程,即使对象在幕后创建了一个线程(我对此表示怀疑),它也无法解决您编写的代码是同步的这一事实,因此无论如何都需要在它自己的线程中。

于 2009-11-15T05:05:58.467 回答