Я озирался на всем протяжении сети, но я не могу найти ответ на следующий вопрос.
У меня есть экземпляр C#/.NET NamedPipeClientStream в клиентской программе, и рабочий поток называет NamedPipeClientStream. Читайте (байт [], интервал, интервал) для получения данных из сервера. Сервер отправляет обновления данных клиенту.
Read является блокирующимся вызовом. Если я хочу закрыть клиент, есть ли способ отменить/выйти вызов Read? Я попытался звонить Близко на экземпляре именованного канала, но он не имеет никакого эффекта на поток который названный Read.
Я думал бы, что будет способ отменить вызов Read. В противном случае это походит, который является очень плохо разработанным API, потому что Ваша программа во власти канала.
Любая информация значительно ценится.
- Chris
Используйте конструктор NamedPipeClientStream, который принимает аргумент PipeOptions. Указание PipeOptions.Asynchronous завершит вызов Read () при вызове метода Close (). Метод Read () возвращает 0.
Это не прямой ответ на ваш вопрос, но - мне пришлось недавно сделать несколько IPC NamedPipe, и я обнаружил, что WCF - это круто. Мне потребовалось меньше часа, чтобы реализовать POC, и да, я почти уверен, что он также предоставляет средства для отмены вашего запроса - и вам не нужно думать в терминах байтовых массивов.
Это вариант для вас?