Как выполнить Использование компонентов, поддерживающих асинхронную модель, основанную на событияхHow to: Use Components That Support the Event-based Asynchronous Pattern

Многие компоненты предоставляют возможность выполнять работу асинхронно.Many components provide you with the option of performing their work asynchronously. Например, компоненты SoundPlayer и PictureBox позволяют загружать звуки и изображения в фоновом режиме, не прерывая работу основного потока.The SoundPlayer and PictureBox components, for example, enable you to load sounds and images "in the background" while your main thread continues running without interruption.

Чтобы применить асинхронные методы для класса, поддерживающего асинхронную модель на основе событий, зачастую достаточно присоединить обработчик события к событию имя_методаCompleted нужного компонента, как для любого другого события.Using asynchronous methods on a class that supports the Event-based Asynchronous Pattern Overview can be as simple as attaching an event handler to the component's MethodNameCompleted event, just as you would for any other event. При вызове метода имя_методаAsync приложение будет работать без прерывания, пока не будет создано событие имя_методаCompleted.When you call the MethodNameAsync method, your application will continue running without interruption until the MethodNameCompleted event is raised. В обработчике событий вы можете проверить параметр AsyncCompletedEventArgs, чтобы определить, была ли асинхронная операция выполнена успешно или отменена.In your event handler, you can examine the AsyncCompletedEventArgs parameter to determine if the asynchronous operation successfully completed or if it was canceled.

Дополнительные сведения об обработчиках событий см. в статье Event Handlers Overview (Общие сведения об обработчиках событий).For more information about using event handlers, see Event Handlers Overview.

Следующая процедура демонстрирует, как использовать возможность асинхронной загрузки изображений в элементе управления PictureBox.The following procedure shows how to use the asynchronous image-loading capability of a PictureBox control.

Асинхронная загрузка изображений для элемента управления PictureBoxTo enable a PictureBox control to asynchronously load an image

  1. Создайте в форме экземпляр компонента PictureBox.Create an instance of the PictureBox component in your form.

  2. Назначьте обработчик событий для события LoadCompleted.Assign an event handler to the LoadCompleted event.

    Проверьте в нем наличие ошибок, которые могли произойти во время асинхронной загрузки.Check for any errors that may have occurred during the asynchronous download here. Также здесь нужно проверить, не запрошена ли отмена.This is also where you check for cancellation.

    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. Добавьте в форму две кнопки с именами loadButton и cancelLoadButton.Add two buttons, called loadButton and cancelLoadButton, to your form. Добавьте обработчики событий Click для запуска и отмены загрузки.Add Click event handlers to start and cancel the download.

    private void loadButton_Click(object sender, EventArgs e)
    {
        // Replace with a real url.
        pictureBox1.LoadAsync("http://www.tailspintoys.com/image.jpg");
    }
    
    Private Sub loadButton_Click( _
        ByVal sender As System.Object, _
        ByVal e As System.EventArgs) _
        Handles loadButton.Click
    
        ' Replace with a real url.
        PictureBox1.LoadAsync("http://www.tailspintoys.com/image.jpg")
    
    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. Запустите приложение.Run your application.

    В процессе загрузки изображения вы сможете свободно перемещаться по форме, сворачивать ее и разворачивать.As the image download proceeds, you can move the form freely, minimize it, and maximize it.

См. такжеSee also