Почему я получаю "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)