Procédure : utiliser des composants qui prennent en charge le modèle asynchrone basé sur des événements

De nombreux composants peuvent effectuer leur travail de façon asynchrone. Les composants SoundPlayer et PictureBox, par exemple, permettent de charger des sons et des images « en arrière-plan » pendant que le thread principal continue de s’exécuter sans interruption.

Il peut être aussi simple d’utiliser des méthodes asynchrones sur une classe qui prend en charge la Vue d’ensemble du modèle asynchrone basé sur les événements que d’attacher un gestionnaire d’événements à l’événement MethodNameCompleted, comme pour n’importe quel autre événement. Lorsque vous appelez la méthode MethodNameAsync, votre application continuera de s’exécuter sans interruption jusqu'à ce que l’événement MethodNameCompleted soit déclenché. Dans votre gestionnaire d’événements, vous pouvez examiner le paramètre AsyncCompletedEventArgs pour déterminer si l’opération asynchrone s’est terminée avec succès ou si elle a été annulée.

Pour plus d’informations sur les gestionnaires d’événements, consultez la page Vue d’ensemble des gestionnaires d’événements.

La procédure suivante montre comment utiliser la fonction de chargement d’image asynchrone d’un contrôle PictureBox.

Autoriser un contrôle PictureBox à charger une image de façon asynchrone

  1. Créez une instance du composant PictureBox dans votre formulaire.

  2. Affectez un gestionnaire d'événements à l'événement LoadCompleted.

    Regardez si des erreurs s’y sont produites pendant le téléchargement asynchrone. C’est également ici qu’il faut vérifier si une annulation est survenue.

    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. Ajoutez deux boutons, nommés loadButton et cancelLoadButton, à votre formulaire. Ajoutez des gestionnaires d’événements Click pour démarrer et annuler le téléchargement.

    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. Exécutez votre application.

    Pendant le téléchargement de l’image, vous pourrez déplacer librement le formulaire, le réduire et l’agrandir.

Voir aussi