У меня есть служба 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")
во второй раз.
EDIT:
Я нашел ответ, и он работает, когда указано максимальное количество экземпляров сервера
NamedPipeServerStream ps = new NamedPipeServerStream("mytestp",PipeDirection.Out,10);
Значение по умолчанию для этого значения равно -1. Что приводит к другому, но не к важному вопросу: кто-то знает, почему это -1, а не 1, когда он ведет себя как beeing 1?