取消NamedPipeClientStream.Read调用

时间:2010-03-01 19:47:16

标签: c# .net multithreading named-pipes

我浏览了整个网络,但我找不到以下问题的答案。

我在客户端程序中有一个C#/。NET NamedPipeClientStream实例,而一个工作线程正在调用NamedPipeClientStream.Read(byte [],int,int)来从服务器获取数据。服务器将数据更新发送到客户端。

阅读是阻止通话。如果我想关闭客户端,有没有办法取消/退出读取呼叫?我试过在命名管道实例上调用Close,但它对调用Read的线程没有影响。

我认为有办法取消阅读电话。如果没有,似乎这是一个设计非常糟糕的API,因为你的程序受到管道的支配。

非常感谢任何信息。

-Chris

2 个答案:

答案 0 :(得分:9)

使用带有PipeOptions参数的NamedPipeClientStream构造函数。在调用Close()方法时,指定PipeOptions.Asynchronous将完成Read()调用。 Read()方法返回0。

答案 1 :(得分:0)

不能直接回答你的问题,但是 - 我最近不得不做一些NamedPipe IPC,我发现WCF很棒。花了我不到一个小时来实现POC,是的,我很确定它暴露了取消你的请求的方法 - 你不必考虑字节数组。

这是你的选择吗?