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

Muitos componentes fornecem a você a opção de realizar seu trabalho de forma assíncrona. O SoundPlayer e PictureBox componentes, por exemplo, permitem que você carregar sons e imagens "em segundo plano" enquanto o thread principal continua executando sem interrupção.

Usando os métodos assíncronos em uma classe que ofereça suporte a Event-based Asynchronous Pattern Overview pode ser tão simples como anexar um manipulador de eventos para o componente MethodNameCompleted evento, exatamente como faria com qualquer outro evento. Quando você chama o MethodNameAsync método, o aplicativo irá continuar a execução sem interrupção até o MethodNameCompleted evento é gerado. No manipulador de eventos, você pode examinar o AsyncCompletedEventArgs parâmetro para determinar se a operação assíncrona concluída com êxito ou se foi cancelada.

Para obter mais informações sobre como usar os manipuladores de eventos, consulte Visão geral dos Manipuladores de Eventos (Formulários do Windows).

O procedimento a seguir mostra como usar o recurso de carregamento da imagem assíncrono de um PictureBox de controle.

Para ativar um controle PictureBox assincronamente carregar uma imagem

  1. Criar uma instância de PictureBox componente no formulário.

  2. Atribuir um manipulador de eventos para o LoadCompleted de evento.

    Verificação de erros que possam ter ocorrido durante o download assíncrono aqui. Também é onde você verificar cancelamento.

    Friend WithEvents PictureBox1 As System.Windows.Forms.PictureBox
    
    public Form1()
    {
        InitializeComponent();
    
        this.pictureBox1.LoadCompleted += 
            new System.ComponentModel.AsyncCompletedEventHandler(this.pictureBox1_LoadCompleted);
    }
    
    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
    
    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");
        }
    }
    
  3. Adicione dois botões, chamados loadButton e cancelLoadButton, para o seu formulário. Adicionar Click manipuladores de eventos para iniciar e cancelar o download.

    Private Sub loadButton_Click( _
        ByVal sender As System.Object, _
        ByVal e As System.EventArgs) _
        Handles loadButton.Click
    
        ' Replace with a real url.
        PictureBox1.LoadAsync("http://www.tailspintoys.com/image.jpg")
    
    End Sub
    
    private void loadButton_Click(object sender, EventArgs e)
    {
        // Replace with a real url.
        pictureBox1.LoadAsync("http://www.tailspintoys.com/image.jpg");
    }
    
    Private Sub cancelLoadButton_Click( _
        ByVal sender As System.Object, _
        ByVal e As System.EventArgs) _
        Handles cancelLoadButton.Click
    
        PictureBox1.CancelAsync()
    
    End Sub
    
    private void cancelLoadButton_Click(object sender, EventArgs e)
    {
        pictureBox1.CancelAsync();
    }
    
  4. Execute o aplicativo.

    Como o download da imagem continua, mover o formulário livremente, minimizá-la e maximizá-la.

Consulte também

Tarefas

Como: Executar uma operação em segundo plano

Conceitos

Event-based Asynchronous Pattern Overview

Outros recursos

Multithreading in Visual Basic