与c#一起使用命名管道时。如果我们使用using语句创建客户端和服务器管道,则将streamReader和streamWriter连接到它。当namedPipe被处置时(在using语句的末尾),streamReader和StreamWriter也会被处置吗?
没有流并不能神奇地跟踪使用它们的每个StreamReader
或StreamWriter
实例。这对任何流都是如此,而不仅仅是命名管道。
var stream = ...;
var reader = new StreamReader(stream);
stream.Dispose();
// reader is not disposed here
但是,默认情况下,处置StreamReader
或StreamWriter
处置由其构造的流:
var stream = ...;
using(var reader = new StreamReader(stream))
// ...
// stream is disposed here
也就是说,除非您通过将true
传递给它们的leaveOpen
参数(下面是最后一个参数)来构造它们:
var stream = ...;
using(var reader = new StreamReader(stream, encoding, false, 4096, true))
// ...
// stream is not disposed here
换句话说,默认情况下,读者或作家own他们的流,这意味着当他们自己关闭时,他们有责任关闭他们。不拥有流的读取器和写入器仅在被处理时才刷新其内部缓冲区,而使流保持不变。