Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Muitos componentes oferecem a opção de executar seu trabalho de forma assíncrona. Os SoundPlayer componentes e PictureBox , por exemplo, permitem que você carregue sons e imagens "em segundo plano" enquanto o thread principal continua em execução sem interrupção.
Usar métodos assíncronos em uma classe que ofereça suporte à Visão Geral do Padrão Assíncrono baseado em Evento pode ser tão simples quanto anexar um manipulador de eventos ao evento MethodNameCompleted do componente, assim como faria para qualquer outro evento. Quando você chama o método MethodNameAsync , seu aplicativo continuará em execução sem interrupção até que o evento MethodNameCompleted seja gerado. No manipulador de eventos, você pode examinar o AsyncCompletedEventArgs parâmetro para determinar se a operação assíncrona foi concluída com êxito ou se foi cancelada.
Para obter mais informações sobre como usar manipuladores de eventos, consulte Visão geral de manipuladores de eventos.
O procedimento a seguir mostra como usar o recurso de carregamento assíncrono de imagem de um PictureBox controle.
Para habilitar um controle PictureBox para carregar uma imagem de forma assíncrona
Crie uma instância do PictureBox componente em seu formulário.
Atribua um manipulador de eventos ao LoadCompleted evento.
Verifique se há erros que possam ter ocorrido durante o download assíncrono aqui. É também aqui que verifica o cancelamento.
public Form1() { InitializeComponent(); this.pictureBox1.LoadCompleted += new System.ComponentModel.AsyncCompletedEventHandler(this.pictureBox1_LoadCompleted); }Friend WithEvents PictureBox1 As System.Windows.Forms.PictureBoxprivate void pictureBox1_LoadCompleted(object sender, AsyncCompletedEventArgs e) { if (e.Error != null) { MessageBox.Show(e.Error.Message, "Load Error"); } else if (e.Cancelled) { MessageBox.Show("Load canceled", "Canceled"); } else { MessageBox.Show("Load completed", "Completed"); } }Private Sub PictureBox1_LoadCompleted( _ ByVal sender As System.Object, _ ByVal e As System.ComponentModel.AsyncCompletedEventArgs) _ Handles PictureBox1.LoadCompleted If (e.Error IsNot Nothing) Then MessageBox.Show(e.Error.Message, "Load Error") ElseIf e.Cancelled Then MessageBox.Show("Load cancelled", "Canceled") Else MessageBox.Show("Load completed", "Completed") End If End SubAdicione dois botões, chamados
loadButtonecancelLoadButton, ao seu formulário. Adicione Click manipuladores de eventos para iniciar e cancelar o download.private void loadButton_Click(object sender, EventArgs e) { // Replace with a real url. pictureBox1.LoadAsync("https://unsplash.com/photos/qhixfmpqN8s/download?force=true&w=1920"); }Private Sub loadButton_Click( _ ByVal sender As System.Object, _ ByVal e As System.EventArgs) _ Handles loadButton.Click ' Replace with a real url. PictureBox1.LoadAsync("https://unsplash.com/photos/qhixfmpqN8s/download?force=true&w=1920") End Subprivate void cancelLoadButton_Click(object sender, EventArgs e) { pictureBox1.CancelAsync(); }Private Sub cancelLoadButton_Click( _ ByVal sender As System.Object, _ ByVal e As System.EventArgs) _ Handles cancelLoadButton.Click PictureBox1.CancelAsync() End SubExecute seu aplicativo.
À medida que o download da imagem prossegue, você pode mover o formulário livremente, minimizá-lo e maximizá-lo.