Поделиться через


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 и присвоит состоянию значение Отменено.

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

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

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

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