Compartilhar via


BitmapSource.SetSourceAsync(IRandomAccessStream) Método

Definição

Define a imagem de origem de um BitmapSource acessando um fluxo e processando o resultado de forma assíncrona.

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

Parâmetros

streamSource
IRandomAccessStream

A origem do fluxo que define o valor de origem da imagem.

Retornos

Um manipulador assíncrono chamado quando a operação é concluída.

Atributos

Exemplos

Este exemplo mostrado aqui usa um fluxo de arquivos (obtido usando um seletor de arquivos, não mostrado) para carregar uma fonte de imagem chamando SetSourceAsync. O seletor de arquivos, o fluxo e a chamada para SetSourceAsync são todos assíncronos. O código mostrado aqui vem de um exemplo de código maior, o exemplo de imagens XAML do 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;
}

Comentários

Definir uma fonte de imagem chamando o método SetSourceAsync assíncrono em vez do método SetSource semelhante evita bloquear o thread da interface do usuário. O comportamento SetSourceAsync é semelhante ao que o sistema faz internamente quando você define uma fonte de imagem como um URI na marcação: o sistema não espera para recuperar e decodificar, mas executa o layout novamente quando a origem da imagem está disponível. O equivalente de análise de marcação não expõe a infraestrutura assíncrona , mas o método SetSourceAsync expõe. Para obter mais informações sobre como usar async, await ou como trabalhar com um valor IAsyncAction , consulte Chamar APIs assíncronas em C# ou Visual Basic.

Se o aplicativo alterar a origem da imagem novamente por meio de SetSourceAsync, SetSource ou UriSource enquanto uma chamada SetSourceAsync já estiver em andamento, a ação SetSourceAsync pendente lançará uma TaskCanceledException e definirá o Statuscomo Cancelado.

Se você tiver um fluxo do Microsoft .NET que deseja usar como fonte, poderá usar o método de extensão AsRandomAccessStream para convertê-lo no tipo IRandomAccessStream necessário como entrada para SetSourceAsync.

Em situações de memória baixa (provavelmente em telefones com memória inferior), é possível gerar uma exceção com a mensagem "A imagem não é reconhecida" e um HRESULT de 0x88982F60. Embora essa exceção normalmente indique dados inválidos, se o aplicativo estiver próximo do limite de memória, a causa da exceção provavelmente será memória baixa. Nesse caso, recomendamos que você libere a memória e tente novamente.

Aplica-se a

Confira também