为什么我会得到"' System.Array'不包含' AsBuffer'"的定义使用此WinRT代码?

时间:2014-10-24 00:00:44

标签: c# windows-runtime bytearray bitmapimage system.array

根据this,以下代码可用于将字节数组转换为BitmapImage:

public static async Task<BitmapImage> ByteArrayToBitmapImage(this byte[] byteArray)
{
    if (byteArray != null)
    {
        using (var stream = new InMemoryRandomAccessStream())
        {
            await stream.WriteAsync(byteArray.AsBuffer());
            var image = new BitmapImage();
            stream.Seek(0);
            image.SetSource(stream);
            return image;
        }
    }
    return null;
}

但是,我得到了,“'System.Array'不包含'AsBuffer'的定义,并且没有扩展方法'AsBuffer'可以找到类型'System.Array'的第一个参数'(是你吗?)缺少using指令或程序集引用?)

“var stream”赋值是否过于模糊(隐式类型)并且我需要为“stream”var指定特定的数据类型? System.Array以外的东西?

也许这个,来自“Windows Store Apps Succinctly”是一个线索: 缓冲区/字节数组 - System.Runtime.InteropServices.WindowsRuntime。 WindowsRuntimeBufferExtensions:此类中的扩展方法提供了在.NET字节数组和WinRT缓冲区内容之间移动的方法,公开为IBuffer实现。

...但如果是的话,那对我来说不足以让他知道如何处理它。而不是“TMI”,它是“NEI”(没有足够的信息)。

1 个答案:

答案 0 :(得分:8)

问题是编译器没有找到extension method AsBuffer()。确保您引用了名称空间System.Runtime.InteropServices.WindowsRuntime,即

using System.Runtime.InteropServices.WindowsRuntime;

如果您还没有,还需要add a reference到相应的DLL:

  

命名空间:System.Runtime.InteropServices.WindowsRuntime

     

程序集:System.Runtime.WindowsRuntime(在System.Runtime.WindowsRuntime.dll中)