Porady: używanie składnika obsługującego wzorzec asynchroniczny oparty na zdarzeniach

Wiele składników zapewnia możliwość asynchronicznego wykonywania pracy. Składniki SoundPlayer i PictureBox , na przykład, umożliwiają ładowanie dźwięków i obrazów "w tle", podczas gdy główny wątek nadal działa bez przerwy.

Używanie metod asynchronicznych w klasie obsługującej asynchroniczny wzorzec oparty na zdarzeniach — omówienie może być tak proste, jak dołączanie programu obsługi zdarzeń do zdarzenia MethodNameukończonegoskładnika, tak samo jak w przypadku dowolnego innego zdarzenia. Po wywołaniu metody MethodNameAsync aplikacja będzie nadal działać bez przerwy do momentu zgłoszenia zdarzenia MethodNameCompleted . W programie obsługi zdarzeń można sprawdzić AsyncCompletedEventArgs parametr, aby określić, czy operacja asynchroniczna została pomyślnie ukończona, czy została anulowana.

Aby uzyskać więcej informacji na temat korzystania z programów obsługi zdarzeń, zobacz Omówienie procedur obsługi zdarzeń.

Poniższa procedura przedstawia sposób użycia asynchronicznego możliwości ładowania obrazów kontrolki PictureBox .

Aby włączyć kontrolkę PictureBox do asynchronicznego ładowania obrazu

  1. Utwórz wystąpienie składnika w formularzu PictureBox .

  2. Przypisz program obsługi zdarzeń do LoadCompleted zdarzenia.

    Sprawdź wszelkie błędy, które mogły wystąpić podczas asynchronicznego pobierania tutaj. Jest to również miejsce, w którym sprawdzasz anulowanie.

    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. Dodaj dwa przyciski o nazwie loadButton i cancelLoadButton, do formularza. Dodaj Click programy obsługi zdarzeń, aby uruchomić i anulować pobieranie.

    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. Uruchom aplikację.

    Podczas pobierania obrazu możesz swobodnie przenieść formularz, zminimalizować go i zmaksymalizować.

Zobacz też