Я пытаюсь поделиться экземпляром 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);