我刚刚将我的项目从Win 8升级到Win 8.1,并且我试图利用SDK中的一些新功能。其中之一是新的AsRandomAccessStream
扩展方法。我遇到的问题是当我使用它时,我收到了一个未经授权的访问异常。
异常:抓住:"无法访问MemoryStream的内部缓冲区。" (System.UnauthorizedAccessException)A 捕获了System.UnauthorizedAccessException:" MemoryStream' s 内部缓冲区无法访问。"时间:3/11/2014 10:23:11 AM 螺纹:[4308]
BitmapImage image = new BitmapImage();
var imageStream = new MemoryStream(imageBytes as byte[]);
image.SetSource(imageStream.AsRandomAccessStream());
有什么想法吗?
答案 0 :(得分:3)
我今天遇到了这个问题,对我而言,它似乎是一个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());
答案 1 :(得分:1)
一个简单的解决方法是组合一些扩展方法。
var image = new BitmapImage();
var imageSource = imageBytes.AsBuffer().AsStream().AsRandomAccessStream();
image.SetSource(imageSource);