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 の呼び出しはすべて非同期です。 ここに示すコードは、より大きなコード サンプルである SDK XAML イメージ サンプルに由来します。

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

注釈

同様の SetSource メソッドではなく、非同期の SetSourceAsync メソッドを呼び出してイメージ ソースを設定すると、UI スレッドがブロックされるのを回避できます。 SetSourceAsync 動作は、イメージ ソースをマークアップの URI として設定するときにシステムが内部的に行う動作と似ています。システムは取得とデコードを待機しませんが、イメージ ソースが使用可能になるとレイアウトが再度実行されます。 同等のマークアップ解析では 非同期 インフラストラクチャは公開されませんが、SetSourceAsync メソッドでは公開されます。 asyncawait、または IAsyncAction 値を操作する方法の詳細については、「C# または Visual Basic で非同期 API を呼び出す」を参照してください。

SetSourceAsync 呼び出しが既に進行中に SetSourceAsync、SetSource、または UriSource を使用してアプリがイメージ ソースを再度変更した場合、保留中の SetSourceAsync アクションは TaskCanceledException をスローし、Status を Canceled に設定します

ソースとして使用する Microsoft .NET ストリームがある場合は、 AsRandomAccessStream 拡張メソッドを使用して、SetSourceAsync の入力として必要な IRandomAccessStream 型に変換できます。

メモリ不足の状況 (低メモリの電話の場合が多い) では、"イメージが認識されていません" というメッセージと 0x88982F60 の HRESULT で例外が発生する可能性があります。 通常、この例外は不適切なデータを示しますが、アプリがメモリ制限に近い場合、例外の原因はメモリ不足である可能性があります。 その場合は、メモリを解放してから、もう一度お試しください。

適用対象

こちらもご覧ください