Прочитать на английском

Поделиться через


Практическое руководство. Использование компонентов, поддерживающих асинхронную модель, основанную на событиях

Многие компоненты предоставляют возможность выполнять работу асинхронно. Например, компоненты SoundPlayer и PictureBox позволяют загружать звуки и изображения в фоновом режиме, не прерывая работу основного потока.

Чтобы применить асинхронные методы для класса, поддерживающего асинхронную модель на основе событий, зачастую достаточно присоединить обработчик события к событию имя_методаCompleted нужного компонента, как для любого другого события. При вызове метода имя_методаAsync приложение будет работать без прерывания, пока не будет создано событие имя_методаCompleted. В обработчике событий вы можете проверить параметр AsyncCompletedEventArgs, чтобы определить, была ли асинхронная операция выполнена успешно или отменена.

Дополнительные сведения об обработчиках событий см. в статье Обзор обработчиков событий (Windows Forms).

Следующая процедура демонстрирует, как использовать возможность асинхронной загрузки изображений в элементе управления PictureBox.

Асинхронная загрузка изображений для элемента управления PictureBox

  1. Создайте в форме экземпляр компонента PictureBox.

  2. Назначьте обработчик событий для события LoadCompleted.

    Проверьте в нем наличие ошибок, которые могли произойти во время асинхронной загрузки. Также здесь нужно проверить, не запрошена ли отмена.

    C#
    public Form1()
    {
        InitializeComponent();
    
        this.pictureBox1.LoadCompleted +=
            new System.ComponentModel.AsyncCompletedEventHandler(this.pictureBox1_LoadCompleted);
    }
    
    C#
    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");
        }
    }
    
  3. Добавьте в форму две кнопки с именами loadButton и cancelLoadButton. Добавьте обработчики событий Click для запуска и отмены загрузки.

    C#
    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");
    }
    
    C#
    private void cancelLoadButton_Click(object sender, EventArgs e)
    {
        pictureBox1.CancelAsync();
    }
    
  4. Запустите приложение.

    В процессе загрузки изображения вы сможете свободно перемещаться по форме, сворачивать ее и разворачивать.

См. также