我应该处理IRandomAccessStream还是底层的MemoryStream?

时间:2017-01-17 15:41:19

标签: .net windows-runtime uwp dispose

以下哪一项是正确的?

using (var memoryStream = new MemoryStream())
{
   var randomAccessStream = memoryStream.AsRandomAccessStream();
   process(randomAccessStream);
}

using (var randomAccessStream = new MemoryStream().AsRandomAccessStream())
{
   process(randomAccessStream);
}

我知道我可以直接使用Windows.Storage.Streams.InMemoryRandomAccessStream();,但无论如何我很好奇。理想情况下,带有解释的MSDN文章最好。

1 个答案:

答案 0 :(得分:1)

根据AsRandomAccessStream扩展方法的源代码,您不需要处理底层流。

您可以在磁盘上轻松找到程序集System.Runtime.WindowsRuntime.dll,并使用任何反编译器(例如JetBrains dotPeek)查看其源代码。

AsRandomAccessStream方法创建一个NetFxToWinRtStreamAdapter类的实例,以适当的方式实现IDisposable

void IDisposable.Dispose()
{
  Stream managedStream = this.managedStream;
  if (managedStream == null)
    return;
  this.managedStream = (Stream) null;
  if (this.leaveUnderlyingStreamOpen) //this flag is equal to false.
    return;
  managedStream.Dispose();
}