![](/img/trans.png)
[英]UnauthorizedAccessException when using FileOpenPicker
[英]UnauthorizedAccessException using AsRandomAccessStream
我刚刚将我的项目从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());
有什么想法吗?
我今天遇到了这个问题,对我而言,它似乎是一个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());
一个简单的解决方法是组合一些扩展方法。
var image = new BitmapImage();
var imageSource = imageBytes.AsBuffer().AsStream().AsRandomAccessStream();
image.SetSource(imageSource);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.