Отмена NamedPipeClientStream.Читать - PullRequest
7 голосов
/ 01 марта 2010

Я просмотрел всю сеть, но не могу найти ответ на следующий вопрос.

У меня есть экземпляр C # / .NET NamedPipeClientStream в клиентской программе, и рабочий поток вызывает NamedPipeClientStream.Read (byte [], int, int) для получения данных с сервера. Сервер отправляет обновления данных клиенту.

Чтение - это блокирующий вызов. Если я хочу закрыть клиент, есть ли способ отменить / выйти из вызова Read? Я попытался вызвать Close для экземпляра именованного канала, но он не влияет на поток, вызвавший Read.

Я думаю, что есть способ отменить вызов Read. Если нет, то похоже, что это очень плохо спроектированный API, потому что ваша программа находится на кону.

Любая информация очень ценится.

-Крис

Ответы [ 2 ]

9 голосов
/ 01 марта 2010

Используйте конструктор NamedPipeClientStream, который принимает аргумент PipeOptions. Указание PipeOptions.Asynchronous завершит вызов Read () при вызове метода Close (). Метод Read () возвращает 0.

0 голосов
/ 01 марта 2010

Не прямой ответ на ваш вопрос, но - мне пришлось провести несколько IPC NamedPipe совсем недавно, и я обнаружил, что WCF был потрясающим. На реализацию POC у меня ушло меньше часа, и да, я вполне уверен, что он также предоставляет средства для отмены вашего запроса - и вам не нужно думать о байтовых массивах.

Это вариант для вас?

...