Condividi tramite


BitmapSource.SetSourceAsync(IRandomAccessStream) Metodo

Definizione

Imposta l'immagine di origine per bitmapSource accedendo a un flusso ed elaborando il risultato in modo asincrono.

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

Parametri

streamSource
IRandomAccessStream

Origine del flusso che imposta il valore di origine dell'immagine.

Restituisce

Gestore asincrono chiamato una volta completata l'operazione.

Attributi

Esempio

Questo esempio illustrato di seguito usa un flusso di file (ottenuto usando una selezione file, non visualizzato) per caricare un'origine immagine chiamando SetSourceAsync. La selezione file, il flusso e la chiamata a SetSourceAsync sono tutti asincroni. Il codice illustrato di seguito deriva da un esempio di codice più ampio, l'esempio di immagini XAML dell'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;
}

Commenti

L'impostazione di un'origine immagine chiamando il metodo SetSourceAsync asincrono anziché il metodo SetSource simile evita di bloccare il thread dell'interfaccia utente. Il comportamento SetSourceAsync è simile a quello che il sistema esegue internamente quando si imposta un'origine immagine come URI nel markup: il sistema non attende il recupero e la decodifica, ma esegue di nuovo il layout una volta che l'origine dell'immagine è disponibile. L'equivalente di analisi del markup non espone l'infrastruttura asincrona , ma il metodo SetSourceAsync esegue questa operazione. Per altre info su come usare async, await o come usare un valore IAsyncAction , vedi Chiamare API asincrone in C# o Visual Basic.

Se l'app modifica nuovamente l'origine dell'immagine tramite SetSourceAsync, SetSource o UriSource mentre è già in corso una chiamata SetSourceAsync, l'azione SetSourceAsync in sospeso genererà un'eccezione TaskCanceledException e imposterà lo stato su Annulla.

Se si dispone di un flusso Microsoft .NET che si vuole usare come origine, è possibile usare il metodo di estensione AsRandomAccessStream per convertirlo nel tipo IRandomAccessStream necessario come input per SetSourceAsync.

In situazioni di memoria insufficiente (molto probabilmente nei telefoni con memoria inferiore), è possibile che venga generata un'eccezione con il messaggio "L'immagine non è riconosciuta" e un HRESULT di 0x88982F60. Anche se questa eccezione indica in genere dati non valido, se l'app è vicina al limite di memoria, è probabile che la causa dell'eccezione sia insufficiente. In questo caso, è consigliabile liberare memoria e riprovare.

Si applica a

Vedi anche