BitmapSource.SetSourceAsync(IRandomAccessStream) 方法
定義
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
透過存取串流並非同步處理結果,設定 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;
}
備註
透過呼叫非同步的 SetSourceAsync 方法來設定影像來源,而非類似的 SetSource 方法,可以避免阻塞 UI 執行緒。 SetSourceAsync 的行為類似系統內部將影像來源設為 URI 標記時的做法:系統不會等待擷取和解碼,但一旦影像來源可用,就會再次執行版面配置。 標記解析的等效方法不會暴露 非同步 基礎設施,但 SetSourceAsync 方法會。 想了解更多如何使用 async、wait 或如何操作 IAsyncAction 值的資訊,請參考 C# 或 Visual Basic 中的非同步 API。
如果應用程式在 SetSourceAsync、 SetSource 或 UriSource 再次更改影像來源,而 SetSourceAsync 呼叫正在進行中,待執行的 SetSourceAsync 動作會拋出 TaskCanceledException ,並將 狀態 設為 取消。
如果你有一個想用作來源的Microsoft .NET串流,可以用 AsRandomAccessStream 擴充方法將其轉換成 SetSourceAsync 所需的 IRandomAccessStream 類型。
在記憶體不足的情況下(多數是在記憶體較低的手機上),可能會提出例外,顯示「影像未識別」訊息,並顯示 HRESULT 為 0x88982F60。 雖然此例外通常表示資料品質不佳,但若應用程式接近記憶體限制,異常原因很可能是記憶體不足。 在這種情況下,我們建議你釋放記憶體再試一次。