Share via


Como: Usar componentes que suportam o padrão assíncrono baseado em evento

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

  1. Crie uma instância do PictureBox componente em seu formulário.

  2. 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.PictureBox
    
    private 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 Sub
    
  3. Adicione dois botões, chamados loadButton e cancelLoadButton, 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 Sub
    
    private 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 Sub
    
  4. Execute seu aplicativo.

    À medida que o download da imagem prossegue, você pode mover o formulário livremente, minimizá-lo e maximizá-lo.

Consulte também