繁体   English   中英

使用AsRandomAccessStream的UnauthorizedAccessException

[英]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());
  • imageBytes是一个有效的byte []
  • imageStream是一个有效的MemoryStream
  • imageStream.Position = 0

有什么想法吗?

我今天遇到了这个问题,对我而言,它似乎是一个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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM