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. Хотя это исключение обычно указывает на плохие данные, если ваше приложение близко к ограничению памяти, то причиной исключения, скорее всего, является нехватка памяти. В этом случае рекомендуется освободить память и повторить попытку.