Share via


Postupy: Použití komponent, které podporují asynchronní vzor založený na událostech

Mnoho komponent nabízí možnost asynchronního provádění jejich práce. PictureBox Komponenty SoundPlayer vám například umožňují načíst zvuky a obrázky na pozadí, zatímco hlavní vlákno pokračuje bez přerušení.

Použití asynchronních metod ve třídě, která podporuje přehled asynchronního vzoru založeného na událostech, může být stejně jednoduché jako připojení obslužné rutiny události k události MethodNameCompleted komponenty, stejně jako u jakékoli jiné události. Když zavoláte metodu MethodName Async, vaše aplikace bude nadále spuštěna bez přerušení, dokud se nevyvolá událost MethodNameCompleted. V obslužné rutině události můžete prozkoumat AsyncCompletedEventArgs parametr a zjistit, jestli se asynchronní operace úspěšně dokončila nebo jestli byla zrušena.

Další informace o používání obslužných rutin událostí naleznete v tématu Přehled obslužných rutin událostí.

Následující postup ukazuje, jak používat asynchronní funkci PictureBox načítání obrázků ovládacího prvku.

Povolení ovládacího prvku PictureBox pro asynchronní načtení obrázku

  1. Ve formuláři vytvořte instanci PictureBox komponenty.

  2. Přiřaďte k události obslužnou rutinu LoadCompleted události.

    Zkontrolujte případné chyby, ke kterým mohlo dojít během asynchronního stahování. Tady také zkontrolujete zrušení.

    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. Přidejte do formuláře dvě tlačítka, volaná loadButton a cancelLoadButton. Přidejte Click obslužné rutiny událostí pro spuštění a zrušení stahování.

    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. Spusťte aplikaci.

    S tím, jak bude stahování obrázku pokračovat, můžete formulář volně přesouvat, minimalizovat a maximalizovat.

Viz také