Partager via


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

De nombreux composants vous permettent d'exécuter leur travail de manière asynchrone. Par exemple, les composants SoundPlayer et PictureBox vous permettent de charger « en arrière-plan » des sons et des images alors que l'exécution de votre thread principal se poursuit sans interruption.

L'utilisation des méthodes asynchrones sur une classe qui prend en charge Vue d'ensemble du modèle asynchrone basé sur des événements peut être aussi simple que de joindre un gestionnaire d'événements à l'événement du composant NomMéthodeCompleted, ou tout autre événement. Lorsque vous appelez la méthode NomMéthodeAsync, votre application continue à s'exécuter sans interruption jusqu'à ce que l'événement NomMéthodeCompleted 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 déroulée correctement ou si elle a été annulée.

Pour plus d'informations sur l'utilisation de gestionnaires d'événements, consultez Vue d'ensemble des gestionnaires d'événements (Windows Forms).

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

Permettre à un contrôle PictureBox de charger une image de manière asynchrone

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

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

    Recherchez toutes les erreurs qui ont pu se produire pendant le téléchargement asynchrone. Contrôlez également l'annulation.

    Friend WithEvents PictureBox1 As System.Windows.Forms.PictureBox
    
    public Form1()
    {
        InitializeComponent();
    
        this.pictureBox1.LoadCompleted += 
            new System.ComponentModel.AsyncCompletedEventHandler(this.pictureBox1_LoadCompleted);
    }
    
    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
    
    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. Ajoutez deux boutons, nommés loadButton et cancelLoadButton, à votre formulaire. Ajoutez les gestionnaires d'événements Click pour lancer et annuler le téléchargement.

    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 loadButton_Click(object sender, EventArgs e)
    {
        // Replace with a real url.
        pictureBox1.LoadAsync("http://www.tailspintoys.com/image.jpg");
    }
    
    Private Sub cancelLoadButton_Click( _
        ByVal sender As System.Object, _
        ByVal e As System.EventArgs) _
        Handles cancelLoadButton.Click
    
        PictureBox1.CancelAsync()
    
    End Sub
    
    private void cancelLoadButton_Click(object sender, EventArgs e)
    {
        pictureBox1.CancelAsync();
    }
    
  4. Exécutez votre application.

    Au cours du téléchargement de l'image, vous pouvez déplacer librement le formulaire, le réduire et l'agrandir.

Voir aussi

Tâches

Comment : exécuter une opération en arrière-plan

Concepts

Vue d'ensemble du modèle asynchrone basé sur des événements

Autres ressources

Multithreading in Visual Basic