C# App.GetResourceStream返回的流的最合适用法
我的问题已经有点被问到了,但我有几个不同的问题:C# App.GetResourceStream返回的流的最合适用法,c#,wpf,resources,stream,idisposable,C#,Wpf,Resources,Stream,Idisposable,我的问题已经有点被问到了,但我有几个不同的问题: 这适用于桌面WPF应用程序,而不是WP7(如果有任何区别的话) 我必须决定是否在流之上构建的流阅读器上使用using块 下面是一些代码: System.Windows.Resources.StreamResourceInfo ri = App.GetResourceStream(new Uri("Resources/Idioms.txt", UriKind.Relative)); using (System.IO.StreamReader
using
块System.Windows.Resources.StreamResourceInfo ri =
App.GetResourceStream(new Uri("Resources/Idioms.txt", UriKind.Relative));
using (System.IO.StreamReader sr = new System.IO.StreamReader(ri.Stream))
{
idioms = sr.ReadToEnd().Split(lineSeps, StringSplitOptions.RemoveEmptyEntries);
}
现在StreamReader的close方法(我假设是实现IDisposable.Dispose
)表明它也关闭底层流(我假设也是实现IDisposable.Dispose
)
因此,这是对GetResourceStream
的Stream
属性提供的IO.Stream
对象的关闭或处理:
(我应该在流之上构建的读卡器上使用或避免使用
吗?StreamReader
的ctor有一个重载,让您告诉它不要关闭流
另外,你有点向后(除非我误解了)。调用Close
的是Dispose
方法,而不是相反。StreamReader上没有可访问的Dispose方法,因此我假设Close方法是在IDisposable上实现Dispose的方法。我认为另一种可能性是,它是私有的,只有当对象被强制转换为IDisposable时才可访问。如果是后者,那么我想Dispose调用Close是有意义的。但我看没有理由不做同样的事情。在关闭读卡器后,只要它没有被释放,您可以继续使用它吗?另外,我的问题仍然是,如果流位于GetResourceStream返回的对象上,我是否应该利用让流保持打开的选项?我正在使用问题中所示的代码,没有出现任何错误。然后我可以安全地假设我不需要抑制流的关闭吗?