NamedPipeServerStream Поток чтения / записи C # - PullRequest
0 голосов
/ 23 октября 2011

Я пытаюсь поделиться экземпляром NamedPipeServerStream между двумя потоками, читателем и писателем. Программа работает, но когда я пытаюсь создать два экземпляра объекта ServerProcess, поток записи начинает зависать. Куда я иду не так?

Любые предложения будут с благодарностью.

Метод нереста следующий:

 public class ServerPrcoess
 {
    private static NamedPipeServerStream m_NamePipeHandle;
    public  static void StartPipe()
    {
        int i = 0;

        Thread[] OPCServerReader = new Thread();
        Thread[] OPCServerWriter = new Thread();

        m_NamePipeHandle = new NamedPipeServerStream(PIPENAME, PipeDirection.InOut, 254, PipeTransmissionMode.Message, PipeOptions.Asynchronous);

        m_NamePipeHandle.WaitForConnection();

        OPCServerReader = new Thread(PipeReaderThread);
        OPCServerReader.IsBackground = true;
        OPCServerReader.Start(i);

        Thread.Sleep(1000);

        OPCServerWriter = new Thread(PipeWriterThread);
        OPCServerWriter.IsBackground = true;
        OPCServerWriter.Start();
      }
 }

Поток читателя похож на приведенный ниже и создает двоичный объект читателя, используя дескриптор канала: -

private  static void PipeReaderThread(object ThreadNo)
{
     Console.WriteLine("Reader Thread Number: {0}", (int)ThreadNo);
     try
     {

         StreamOPCMessageReader oMsgReader = new StreamOPCMessageReader(m_NamePipeHandle);

            ...

И поток писателя делает то же самое, используя тот же дескриптор канала.

private static void PipeWriterThread(object _ThreadNo)
{         
     int ThreadNo  = Thread.CurrentThread.ManagedThreadId;
     try
     {               
        StreamOPCMessageWriter oMsgWriter = new StreamOPCMessageWriter(m_NamePipeHandle);

1 Ответ

0 голосов
/ 23 октября 2011

Вы не можете создать несколько экземпляров NamedPipeServerStream с одним и тем же именем ( PIPENAME ).

...