我启动了我的应用程序,它生成了许多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并吃掉异常.但它感觉不对..任何建议 …
嗨,
我想使用NamedPipeServerStream,这是.NET 3.5中用于namedpipe通信的新功能.我想写多线程管道服务器.它是默认处理还是我应该为此编写代码.我的管道服务器应该一次处理多个请求
任何解决方案或代码?