Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/318.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# App.GetResourceStream返回的流的最合适用法_C#_Wpf_Resources_Stream_Idisposable - Fatal编程技术网

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

我的问题已经有点被问到了,但我有几个不同的问题:

  • 这适用于桌面WPF应用程序,而不是WP7(如果有任何区别的话)
  • 我必须决定是否在流之上构建的流阅读器上使用
    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返回的对象上,我是否应该利用让流保持打开的选项?我正在使用问题中所示的代码,没有出现任何错误。然后我可以安全地假设我不需要抑制流的关闭吗?