我有一个 Windows 服务,它通过命名管道与 gui 应用程序通信。因此,我有一个线程正在运行,等待应用程序连接,如果我这样做一次,它运行良好。但是,如果线程正在创建命名管道流服务器的新实例,则已经建立的连接会中断,并且我会得到所有实例繁忙的异常。抛出异常的代码片段是这样的:
class PipeStreamWriter : TextWriter
{
static NamedPipeServerStream _output = null;
static StreamWriter _writer = null;
static Thread myThread = null;
public PipeStreamWriter()
{
if (myThread == null)
{
ThreadStart newThread = new ThreadStart(delegate{WaitForPipeClient();});
myThread = new Thread(newThread);
myThread.Start();
}
}
public static void WaitForPipeClient()
{
Thread.Sleep(25000);
while (true)
{
NamedPipeServerStream ps = new NamedPipeServerStream("mytestp");
ps.WaitForConnection();
_output = ps;
_writer = new StreamWriter(_output);
}
}
第二次创建新的管道服务器流时抛出异常NamedPipeServerStream ps = new NamedPipeServerStream("mytestp")
。
编辑:
我找到了答案,它在指定最大服务器实例数时有效
NamedPipeServerStream ps = new NamedPipeServerStream("mytestp",PipeDirection.Out,10);
这个的默认值似乎是-1。这就引出了另一个但不那么重要的问题:有人知道为什么它表现得像蜜蜂 1 时它是 -1 而不是 1?