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
Maak een exemplaar van het PictureBox onderdeel in uw formulier.
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
Voeg twee knoppen, aangeroepen
loadButton
encancelLoadButton
, 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
Voer uw toepassing uit.
Wanneer de afbeelding wordt gedownload, kunt u het formulier vrij verplaatsen, minimaliseren en maximaliseren.