BitmapSource.SetSourceAsync method

Applies to Windows and Windows Phone

Sets the source image for a BitmapSource by accessing a stream and processing the result asynchronously.

Syntax


public:
IAsyncAction^ SetSourceAsync(
  IRandomAccessStream^ streamSource
)

Parameters

streamSource

Type: IRandomAccessStream

The stream source that sets the image source value.

Return value

Type: IAsyncAction

An asynchronous handler called when the operation is complete.

Remarks

Setting an image source by calling the asynchronous SetSourceAsync method rather than the similar SetSource method avoids blocking the UI thread. The SetSourceAsync behavior is similar to what the system does internally when you set an image source as a URI in markup: the system doesn't wait to retrieve and decode, but it does run layout again once the image source is available. The markup parsing equivalent doesn't expose the async infrastructure, but the SetSourceAsync method does. For more info on how to use async, await, or how to work with an IAsyncAction value, see Quickstart: Calling asynchronous APIs.

If the app changes the image source again via SetSourceAsync, SetSource or UriSource while a SetSourceAsync call is already in progress, the pending SetSourceAsync action will throw a TaskCanceledException and set the Status to Canceled.

If you have a Microsoft .NET stream that you want to use as a source, you can use the AsRandomAccessStream extension method to convert it to the IRandomAccessStream type that's needed as input for SetSourceAsync.

In low memory situations (most likely on lower-memory phones), it is possible for an exception to be raised with the message "The image is unrecognized" and an HRESULT of 0x88982F60. While this exception ordinarily indicates bad data, if your app is close to its memory limit then the cause of the exception is likely to be low memory. In that case, we recommend that you free memory and try again.

Examples

This example shown here uses a file stream (obtained using a file picker, not shown) to load an image source by calling SetSourceAsync. The file picker, stream and call to SetSourceAsync are all asynchronous. The code shown here comes from a larger code sample, the SDK XAML images sample.


// 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;
}

Requirements

Minimum supported client

Windows 8

Minimum supported server

Windows Server 2012

Minimum supported phone

Windows Phone 8.1 [Windows Runtime apps only]

Namespace

Windows.UI.Xaml.Media.Imaging
Windows::UI::Xaml::Media::Imaging [C++]

Metadata

Windows.winmd

See also

BitmapSource
Image
Image.Source
Quickstart: Calling asynchronous APIs
XAML images sample

 

 

Show:
© 2014 Microsoft