Procedimiento para usar componentes que admitan el modelo asincrónico basado en eventos

Muchos componentes le ofrecen la opción de realizar su trabajo de forma asincrónica. Por ejemplo, los componentes SoundPlayer y PictureBox permiten cargas sonidos e imágenes "en segundo plano" mientras el subproceso principal continúa ejecutándose sin interrupción.

Usar métodos asincrónicos en una clase que admite la Información general sobre el modelo asincrónico basado en eventos puede ser tan sencillo como adjuntar un controlador de eventos al evento MethodNameCompleted del componente, como lo haría para cualquier otro evento. Cuando se llama al método MethodNameAsync, la aplicación continuará ejecutándose sin interrupción hasta que se genere el evento MethodNameCompleted. En el controlador de eventos, puede examinar el parámetro AsyncCompletedEventArgs para determinar si la operación asincrónica se completó correctamente o si se canceló.

Para más información sobre el uso de los controladores de eventos, vea Información general sobre controladores de eventos.

En el siguiente procedimiento se explica cómo usar la funcionalidad de carga de imágenes asincrónica de un control PictureBox.

Para permitir que un control PictureBox cargue una imagen de manera asincrónica

  1. Cree una instancia del componente PictureBox en el formulario.

  2. Asigne un controlador de eventos al evento LoadCompleted.

    Compruebe si hay errores que puedan haberse producido durante la descarga asincrónica aquí. También es donde puede comprobar posibles cancelaciones.

    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. Agregue dos botones, denominados loadButton y cancelLoadButton, al formulario. Agregue los controladores de eventos Click para iniciar y cancelar la descarga.

    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. Ejecute la aplicación.

    Mientras se realiza la descarga de la imagen, puede mover libremente el formulario, minimizarlo y maximizarlo.

Consulte también