UnauthorizedAccessException using AsRandomAccessStream

本文关键字:AsRandomAccessStream using UnauthorizedAccessException | 更新日期: 2023-09-27 17:49:44

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

Exception:Caught: "MemoryStream的内部缓冲区无法访问。"(System.UnauthorizedAccessException)系统。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());
  • imageBytes是一个有效的字节[]
  • imageStream是一个有效的内存流
  • imageStream。位置= 0

任何想法吗?

UnauthorizedAccessException using 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);
相关文章:
  • 没有找到相关文章