使用AsRandomAccessStream的UnauthorizedAccessException

ear*_*ing 6 c# windows-8.1

我刚刚将我的项目从Win 8升级到Win 8.1,我正在尝试利用SDK中的一些新功能.其中之一是新的AsRandomAccessStream扩展方法.我遇到的问题是当我使用它时,我收到了一个未经授权的访问异常.

例外:Caught:"无法访问MemoryStream的内部缓冲区." (System.UnauthorizedAccessException)捕获到System.UnauthorizedAccessException:"无法访问MemoryStream的内部缓冲区." 时间:3/11/2014 10:23:11 AM主题:[4308]

BitmapImage image = new BitmapImage();
var imageStream = new MemoryStream(imageBytes as byte[]); 
image.SetSource(imageStream.AsRandomAccessStream());
Run Code Online (Sandbox Code Playgroud)
  • imageBytes是一个有效的byte []
  • imageStream是一个有效的MemoryStream
  • imageStream.Position = 0

有什么想法吗?

小智 4

我今天遇到了这个问题,对我来说,它似乎是一个 API 错误/不一致。

在 .NET 4 中,调用 MemoryStream.GetBuffer() 需要使用某些构造函数(请参阅https://msdn.microsoft.com/en-us/library/system.io.memorystream.getbuffer.aspx)。更具体地说,MemoryStream 的缓冲区必须标记为可公开的。

现在,AsRandomAccessStream() 调用 MemoryStream.GetBuffer()。然而,在Win8.1中,缺少用于设置MemoryStream的公开能力的构造函数。因此,当您创建MemoryStream时,请使用默认的空构造函数,然后调用Write()。

因此,我认为这应该有效。

BitmapImage image = new BitmapImage();
var imageStream = new MemoryStream();
imageStream.Write(yourdata, 0, yourdata.Length); 
image.SetSource(imageStream.AsRandomAccessStream());
Run Code Online (Sandbox Code Playgroud)