Freigeben über


Gewusst wie: Verwenden von Komponenten, die das ereignisbasierte asynchrone Muster unterstützen

Aktualisiert: November 2007

Viele Komponenten bieten die Möglichkeit der asynchronen Aufgabenausführung. Mit der SoundPlayer-Komponente und der PictureBox-Komponente können Sie beispielsweise Sounds und Bilder "im Hintergrund" laden, während der Hauptthread weiterhin ohne Unterbrechung ausgeführt wird.

Das Verwenden asynchroner Methoden für eine Klasse, die Übersicht über ereignisbasierte asynchrone Muster unterstützt, ist genauso einfach wie das Anfügen eines Ereignishandlers an das MethodNameCompleted-Ereignis der Komponente oder an alle weiteren Ereignisse. Bei Aufruf der MethodNameAsync-Methode wird die Anwendung ohne Unterbrechung weiter ausgeführt, bis das MethodNameCompleted-Ereignis ausgelöst wird. Sie können im Ereignishandler den AsyncCompletedEventArgs-Parameter auf den erfolgreichen Abschluss der Operation oder deren Abbruch hin überprüfen.

Weitere Informationen zum Verwenden von Ereignishandlern finden Sie unter Übersicht über Ereignishandler (Windows Forms).

In der folgenden Prozedur wird gezeigt, wie die asynchrone Bildladefunktion eines PictureBox-Steuerelements verwendet wird.

So aktivieren Sie ein PictureBox-Steuerelement, um asynchron ein Bild zu laden

  1. Erstellen Sie im Formular eine Instanz der PictureBox-Komponente.

  2. Ordnen Sie dem LoadCompleted-Ereignis einen Ereignishandler zu.

    Prüfen Sie, ob während des asynchronen Downloads Fehler aufgetreten sind. Prüfen Sie ebenfalls, ob der Download ggf. abgebrochen wurde.

    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. Fügen Sie dem Formular zwei Schaltflächen hinzu, die loadButton-Schaltfläche und die cancelLoadButton-Schaltfläche. Fügen Sie anschließend die Click-Ereignishandler hinzu, um den Download zu starten und abzubrechen.

    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. Führen Sie die Anwendung aus.

    Sie können das Formular während des Bilddownloads ungehindert verschieben und nach Belieben vergrößern oder verkleinern.

Siehe auch

Aufgaben

Gewusst wie: Ausführen eines Vorgangs im Hintergrund

Konzepte

Übersicht über ereignisbasierte asynchrone Muster

Weitere Ressourcen

Multithreading in Visual Basic