编程语言
首页 > 编程语言> > c#-2有关命名管道的问题

c#-2有关命名管道的问题

作者:互联网

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

首先,当尝试设置管道服务器时,我已经注意到,如果我使用下面的代码,则在第一个客户端连接结束时,服务器将不可用,除非我将整个内容包装在一会儿(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在其内部创建了自己的线程,但是我看不到是这种情况.

谢谢!

解决方法:

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

至于线程,即使对象在后台创建了线程(我对此表示怀疑),也无法避免您编写的代码是同步的,因此无论如何都需要在其自己的线程中运行.

标签:multithreading,named-pipes,c
来源: https://codeday.me/bug/20191210/2101539.html