Megosztás a következőn keresztül:


Útmutató: Az eseményalapú aszinkron mintát támogató összetevők használata

Számos összetevő lehetővé teszi a munkájuk aszinkron elvégzését. PictureBox Az SoundPlayer összetevőkkel például "a háttérben" tölthet be hangokat és képeket, miközben a főszál megszakítás nélkül fut.

Az eseményalapú aszinkron minta áttekintését támogató osztály aszinkron metódusainak használata olyan egyszerű lehet, mint egy eseménykezelő csatlakoztatása az összetevő MethodNameCompleted eseményéhez, ugyanúgy, mint bármely más esemény esetében. Amikor meghívja a MethodNameAsync metódust, az alkalmazás megszakítás nélkül fut, amíg létre nem jön a MethodNameCompleted esemény. Az eseménykezelőben megvizsgálhatja a AsyncCompletedEventArgs paramétert annak megállapításához, hogy az aszinkron művelet sikeresen befejeződött-e, vagy megszakították-e.

Az eseménykezelők használatáról további információt az Eseménykezelők áttekintése című témakörben talál.

Az alábbi eljárás bemutatja, hogyan használható egy vezérlőelem aszinkron képbetöltési PictureBox képessége.

Kép aszinkron betöltésének engedélyezése a PictureBox-vezérlőben

  1. Hozzon létre egy példányt az PictureBox összetevőből az űrlapon.

  2. Eseménykezelő hozzárendelése az LoadCompleted eseményhez.

    Ellenőrizze az aszinkron letöltés során esetlegesen előforduló hibákat. Itt is ellenőrizheti a lemondást.

    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. Adjon hozzá két gombot az űrlaphoz.loadButtoncancelLoadButton Adjon hozzá Click eseménykezelőket a letöltés elindításához és megszakításához.

    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. Futtassa az alkalmazást.

    Ahogy a kép letöltése folytatódik, szabadon áthelyezheti az űrlapot, minimalizálhatja és maximalizálhatja azt.

Lásd még