Delen via


Procedure: Onderdelen gebruiken die ondersteuning bieden voor het Asynchrone patroon op basis van gebeurtenissen

Veel onderdelen bieden u de mogelijkheid om hun werk asynchroon uit te voeren. Met de SoundPlayer onderdelen en PictureBox onderdelen kunt u bijvoorbeeld geluiden en afbeeldingen 'op de achtergrond' laden terwijl uw hoofdthread zonder onderbreking wordt uitgevoerd.

Het gebruik van asynchrone methoden voor een klasse die het Asynchrone patroonoverzicht op basis van gebeurtenissen ondersteunt, kan net zo eenvoudig zijn als het koppelen van een gebeurtenis-handler aan de methodNameCompleted-gebeurtenis van het onderdeel, net zoals voor elke andere gebeurtenis. Wanneer u de MethodNameAsync-methode aanroept, wordt uw toepassing zonder onderbreking uitgevoerd totdat de gebeurtenis MethodNameCompleted wordt gegenereerd. In uw gebeurtenis-handler kunt u de AsyncCompletedEventArgs parameter onderzoeken om te bepalen of de asynchrone bewerking is voltooid of of als deze is geannuleerd.

Zie Overzicht van gebeurtenis-handlers voor meer informatie over het gebruik van gebeurtenis-handlers.

In de volgende procedure ziet u hoe u de asynchrone mogelijkheid voor het laden van afbeeldingen van een PictureBox besturingselement gebruikt.

Een besturingselement PictureBox inschakelen om een afbeelding asynchroon te laden

  1. Maak een exemplaar van het PictureBox onderdeel in uw formulier.

  2. Wijs een gebeurtenis-handler toe aan de LoadCompleted gebeurtenis.

    Controleer hier op eventuele fouten die zijn opgetreden tijdens de asynchrone download. Hier controleert u ook op annulering.

    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. Voeg twee knoppen, aangeroepen loadButton en cancelLoadButton, toe aan het formulier. Voeg gebeurtenis-handlers toe Click om de download te starten en te annuleren.

    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. Voer uw toepassing uit.

    Wanneer de afbeelding wordt gedownload, kunt u het formulier vrij verplaatsen, minimaliseren en maximaliseren.

Zie ook