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
Criar uma instância de PictureBox componente no formulário.
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"); } }
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(); }
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