Язык

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 делает. Дополнительные сведения о том, как использовать асинхронный интерфейс, ожидание или как работать со значением IAsyncAction, см. в разделе "Вызов асинхронных API" в C# или Visual Basic.

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

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

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

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

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