BitmapSource.SetSourceAsync(IRandomAccessStream) Метод

Определение

Задает исходное изображение для BitmapSource путем доступа к потоку и асинхронной обработки результата.

public:
 virtual IAsyncAction ^ SetSourceAsync(IRandomAccessStream ^ streamSource) = SetSourceAsync;
/// [Windows.Foundation.Metadata.RemoteAsync]
IAsyncAction SetSourceAsync(IRandomAccessStream const& streamSource);
[Windows.Foundation.Metadata.RemoteAsync]
public IAsyncAction SetSourceAsync(IRandomAccessStream streamSource);
function setSourceAsync(streamSource)
Public Function SetSourceAsync (streamSource As IRandomAccessStream) As IAsyncAction

Параметры

streamSource
IRandomAccessStream

Источник потока, задающий значение источника изображения.

Возвращаемое значение

Асинхронный обработчик, вызываемый после завершения операции.

Атрибуты

Примеры

В этом примере используется файловый поток (полученный с помощью средства выбора файлов, а не показанный) для загрузки источника изображения путем вызова Метода SetSourceAsync. Средство выбора файлов, поток и вызов SetSourceAsync являются асинхронными. Приведенный здесь код получен из более крупного примера кода — примера образов XAML пакета SDK.

// Ensure the stream is disposed once the image is loaded
using (IRandomAccessStream fileStream = await file.OpenAsync(Windows.Storage.FileAccessMode.Read))
{
     // Set the image source to the selected bitmap
     BitmapImage bitmapImage = new BitmapImage();
     bitmapImage.DecodePixelHeight = decodePixelHeight;
     bitmapImage.DecodePixelWidth = decodePixelWidth;

     await bitmapImage.SetSourceAsync(fileStream);
     Scenario2Image.Source = bitmapImage;
}

Комментарии

Установка источника изображения путем вызова асинхронного метода SetSourceAsync, а не аналогичного метода SetSource , позволяет избежать блокировки потока пользовательского интерфейса. Поведение SetSourceAsync аналогично внутреннему поведению системы при установке источника изображения в качестве URI в разметке: система не ожидает извлечения и декодирования, но запускает макет снова, когда источник изображения становится доступным. Эквивалент синтаксического анализа разметки не предоставляет асинхронную инфраструктуру, но метод SetSourceAsync делает это. Дополнительные сведения о том, как использовать async, await или как работать со значением IAsyncAction , см. в статье Вызов асинхронных API в C# или Visual Basic.

Если приложение снова изменяет источник изображения с помощью SetSourceAsync, SetSource или UriSource в то время как вызов SetSourceAsync уже выполняется, ожидающее действие SetSourceAsync вызовет исключение TaskCanceledException и присвоит состоянию значение Canceled.

Если у вас есть поток Microsoft .NET, который вы хотите использовать в качестве источника, можно использовать метод расширения AsRandomAccessStream , чтобы преобразовать его в тип IRandomAccessStream , необходимый в качестве входных данных для SetSourceAsync.

В ситуациях с нехваткой памяти (скорее всего, на телефонах с низким объемом памяти) может возникнуть исключение с сообщением "Изображение нераспознано" и HRESULT 0x88982F60. Хотя это исключение обычно указывает на плохие данные, если ваше приложение близко к ограничению памяти, то причиной исключения, скорее всего, является нехватка памяти. В этом случае рекомендуется освободить память и повторить попытку.

Применяется к

См. также раздел