Почему я получаю "System.Array" не содержит определения "AsBuffer" с этим WinRT-кодом?

В соответствии с этим следующий код может использоваться для преобразования байтового массива в 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 " - подсказка: буферные / байтовые массивы - System.Runtime.InteropServices.WindowsRuntime. WindowsRuntimeBufferExtensions: Методы расширения в этом классе обеспечивают способы перемещения между байтовыми массивами.NET и содержимым буферов WinRT, представленных в виде реализаций IBuffer.

... но если это так, мне недостаточно информации, чтобы знать, что с этим делать. Вместо "TMI" это "NEI" (не достаточно информации).

1 ответ

Решение

Проблема в том, что компилятор не находит метод расширения AsBuffer(), Убедитесь, что у вас есть ссылка на пространство имен System.Runtime.InteropServices.WindowsRuntime т.е.

using System.Runtime.InteropServices.WindowsRuntime;

Вам также нужно добавить ссылку на соответствующую DLL, если вы еще этого не сделали:

Пространство имен: System.Runtime.InteropServices.WindowsRuntime

Сборка: System.Runtime.WindowsRuntime (в System.Runtime.WindowsRuntime.dll)

Другие вопросы по тегам