相关疑难解决方法(0)

关闭在NamedPipeServer#WaitForConnection上阻塞的线程的好方法是什么?

我启动了我的应用程序,它生成了许多Threads,每个Threads创建一个NamedPipeServer(.net 3.5为Named Pipe IPC添加了托管类型)并等待客户端连接(Blocks).代码按预期运行.

private void StartNamedPipeServer()
  {
    using (NamedPipeServerStream pipeStream =
                    new NamedPipeServerStream(m_sPipeName, PipeDirection.InOut, m_iMaxInstancesToCreate, PipeTransmissionMode.Message, PipeOptions.None))
    {
      m_pipeServers.Add(pipeStream);
      while (!m_bShutdownRequested)
      {
        pipeStream.WaitForConnection();
        Console.WriteLine("Client connection received by {0}", Thread.CurrentThread.Name);
        ....  
Run Code Online (Sandbox Code Playgroud)

现在我还需要一种Shutdown方法来干净地完成这个过程.我尝试了通常的bool标志isShutdownRequested技巧.但是管道流在WaitForConnection()调用中保持阻塞,并且线程不会死亡.

public void Stop()
{
   m_bShutdownRequested = true;
   for (int i = 0; i < m_iMaxInstancesToCreate; i++)
   {
     Thread t = m_serverThreads[i];
     NamedPipeServerStream pipeStream = m_pipeServers[i];
     if (pipeStream != null)
     {
       if (pipeStream.IsConnected)
          pipeStream.Disconnect();
       pipeStream.Close();
       pipeStream.Dispose();
     }

     Console.Write("Shutting down {0} ...", t.Name);
     t.Join();
     Console.WriteLine(" done!");
   }
} 
Run Code Online (Sandbox Code Playgroud)

加入永不回归.

我没有尝试但可能会工作的选项是调用Thread.Abort并吃掉异常.但它感觉不对..任何建议 …

c# named-pipes .net-3.5

37
推荐指数
3
解决办法
2万
查看次数

C#中的多线程NamePipeServer

嗨,
我想使用NamedPipeServerStream,这是.NET 3.5中用于namedpipe通信的新功能.我想写多线程管道服务器.它是默认处理还是我应该为此编写代码.我的管道服务器应该一次处理多个请求

任何解决方案或代码?

.net c# multithreading named-pipes

15
推荐指数
2
解决办法
2万
查看次数

标签 统计

c# ×2

named-pipes ×2

.net ×1

.net-3.5 ×1

multithreading ×1