Dela via


Anvisningar: Använda komponenter som stöder det händelsebaserade asynkrona mönstret

Många komponenter ger dig möjlighet att utföra sitt arbete asynkront. Med SoundPlayer komponenterna och PictureBox kan du till exempel läsa in ljud och bilder "i bakgrunden" medan huvudtråden fortsätter att köras utan avbrott.

Att använda asynkrona metoder i en klass som stöder den händelsebaserade Asynkrona mönsteröversikten kan vara lika enkelt som att koppla en händelsehanterare till komponentens MethodNameCompleted-händelse , precis som för andra händelser. När du anropar metoden MethodNameAsync fortsätter programmet att köras utan avbrott tills händelsen MethodNameCompleted har aktiverats. I händelsehanteraren kan du undersöka parametern AsyncCompletedEventArgs för att avgöra om den asynkrona åtgärden har slutförts eller om den avbröts.

Mer information om hur du använder händelsehanterare finns i Översikt över händelsehanterare.

Följande procedur visar hur du använder en kontrolls asynkrona bildinläsningsfunktion PictureBox .

Så här aktiverar du en PictureBox-kontroll för att asynkront läsa in en bild

  1. Skapa en instans av komponenten PictureBox i formuläret.

  2. Tilldela en händelsehanterare till LoadCompleted händelsen.

    Kontrollera om det finns fel som kan ha inträffat under den asynkrona nedladdningen här. Det är också här du söker efter annullering.

    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. Lägg till två knappar, med namnet loadButton och cancelLoadButton, i formuläret. Lägg till Click händelsehanterare för att starta och avbryta nedladdningen.

    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. Kör programmet.

    När bildnedladdningen fortsätter kan du flytta formuläret fritt, minimera det och maximera det.

Se även