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

Viele Komponenten bieten Ihnen die Möglichkeit, ihre Arbeit asynchron auszuführen. Mit den Komponenten SoundPlayer und PictureBox können Sie beispielsweise Sounds und Bilder „im Hintergrund“ laden, während Ihr Hauptthread ohne Unterbrechung weiterläuft.

Die Verwendung von asynchronen Methoden in einer Klasse, die die Übersicht für ereignisbasierte asynchrone Muster unterstützt, kann so einfach sein, indem Sie einen Ereignishandler an das Ereignis MethodNameCompleted der Komponente wie bei jedem anderen Ereignis anhängen. Beim Aufrufen der MethodNameAsync-Methode wird Ihre Anwendung weiterhin ohne Unterbrechung ausgeführt, bis das MethodNameCompleted-Ereignis ausgelöst wird. In Ihrem Ereignishandler können Sie anhand des Parameters AsyncCompletedEventArgs festzustellen, ob der asynchrone Vorgang erfolgreich beendet oder abgebrochen wurde.

Weitere Informationen zur Verwendung von Ereignishandlern finden Sie unter Übersicht über Ereignishandler.

Die folgende Prozedur zeigt, wie die Funktion zum asynchronen Laden von Images eines PictureBox-Steuerelements verwendet wird.

So aktivieren Sie ein PictureBox-Steuerelement zum asynchronen Laden eines Images

  1. Erstellen Sie eine Instanz der PictureBox-Komponente in Ihrem Formular.

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

    Ob während des asynchronen Downloads Fehler aufgetreten sind, prüfen Sie hier. Hier sehen Sie auch, falls es zu einem Abbruch kam.

    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. Fügen Sie zwei Schaltflächen, loadButton und cancelLoadButton, zu Ihrem Formular hinzu. Fügen Sie Click-Ereignishandler zum Starten und Abbrechen des Downloads hinzu.

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

    Während der Imagedownload voranschreitet, können Sie das Formular frei verschieben, minimieren und maximieren.

Weitere Informationen