BitmapSource.SetSourceAsync(IRandomAccessStream) Método
Definição
Importante
Algumas informações se referem a produtos de pré-lançamento que podem ser substancialmente modificados antes do lançamento. A Microsoft não oferece garantias, expressas ou implícitas, das informações aqui fornecidas.
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.