.net c # Anonymous Pipes - неправильно поняли? - PullRequest
5 голосов
/ 26 января 2011

У меня есть приложение родительской формы Windows и дочерний файл line.exe. Используя модифицированный пример MSDN для анонимных каналов (h ttp: //msdn.microsoft.com/en-us/library/bb546102.aspx) Я могу отправить сериализованный объект от родителя к потомку , Ребенок может десериализовать объект и прочитать значения.

Возможно, я неправильно понимаю механику анонимного канала, однако я ожидаю, что канал останется открытым до тех пор, пока я не закрою его, так что я могу отправлять другой объект, когда захочу, однако после того, как объект будет отправлен / получен, канал больше не подключен (определяется свойством IsConnected).

В данный момент, как только объект передается от родителя к потомку, канал закрывается (не "я"). Я поддерживаю ссылку на оригинальный pipeHandle локально, но не могу открыть канал заново. Должен ли я быть в состоянии или не должен был закрыться в первую очередь? Я не понимаю, как я могу открыть другой новый канал, так как я не могу передать дескриптор от родителя клиенту (первоначальный дескриптор канала был передан аргументами в первом случае)

Как отправить другой объект от родителя ребенку?

Я понимаю, что могу использовать именованные каналы, но MSDN рекомендует использовать анонимные каналы для IPC на той же локальной машине.

Большое спасибо

Арни

1 Ответ

7 голосов
/ 26 января 2011

Если вы делаете так, как в примере MSDN, вы закрываете StreamWriter (с помощью оператора using), а закрывает StreamWriter закрывает основной поток.Канал остается открытым до тех пор, пока поток остается открытым, поэтому, если вы не хотите закрывать его, не закрывайте поток и не StreamWriter.

...