使用Application.GetResourceStream
访问资源时,它返回类StreamResourceInfo
的实例,此类不实现IDisposable。
当我在WP7设备上处理完流后,我应该关闭\处理由StreamResourceInfo
公开的底层流 - 我不想知道Using
或Dispose模式。< / p>
一个例子是使用该方法访问ZAP包中包含的ZIP文件,一旦我解压缩文件,我就不再需要Stream
实例了。
答案 0 :(得分:3)
提供的代码示例here未使用using
,Close()
或Dispose()
。
由于StreamResourceInfo
的文档未提及Close()
或Dispose()
(而StreamResourceInfo
实际上并未继承Stream
或其他可能实施的内容这些方法),我认为让对象超出范围并自然地收集垃圾是安全的。
我怀疑StreamResourceInfo
类在垃圾回收期间有一个终结器在底层Dispose()
对象上调用Stream
,但是我没有可用的Reflector副本验证这一点的时刻。 IDisposable
模式在这方面非常强大。
但是,如果您仍然对这种不确定性感到不安,可以随时在Close()
对象上调用Stream
。
答案 1 :(得分:0)
我不知道具体的Windows 7手机,但标准做法是处置对象,如果它被打开它会自动关闭流。处置应该是对象的最终操作,而关闭表示重新打开的可能性。所以你应该在我看来处理。
答案 2 :(得分:0)
Using
范围结束, using
会自动调用dispose方法。所以,你可以做这样的事情。达到范围结束后,您的信息流将被删除。
using (var stream = Application.GetResourceStream(new Uri("myResource.zip", UriKind.Relative)).Stream)
{
//stream code
}
编辑 - 将评论从评论转移到此处: StreamResourceInfo不负责关闭/处理Stream。除非你将Stream传递给其他东西(例如StreamReader),否则关闭流是你的工作。 Found a link that may be of interest几乎与此相符。