Condividi tramite


Procedura: utilizzare componenti che supportano il modello asincrono basato su eventi

Aggiornamento: novembre 2007

Diversi componenti consentono di eseguire le attività a essi associate in modo asincrono. I componenti SoundPlayer e PictureBox, ad esempio, consentono di caricare suoni e immagini in background mentre l'esecuzione del thread principale procede senza interruzioni.

Per utilizzare metodi asincroni su una classe che supporta Cenni preliminari sul modello asincrono basato su eventi, operazione che può risultare semplice quanto il collegamento del gestore eventi all'evento NomeMetodoCompleted del componente, seguire la procedura utilizzata per qualsiasi altro evento. Quando si chiama il metodo NomeMetodoAsync, l'esecuzione dell'applicazione continua senza interruzioni fino alla generazione dell'evento NomeMetodoCompleted. Nel gestore eventi specifico è possibile esaminare il parametro AsyncCompletedEventArgs per determinare se l'operazione asincrona è stata completata o annullata.

Per ulteriori informazioni sull'utilizzo di gestori eventi, vedere Cenni preliminari sui gestori eventi (Windows Form).

Nella procedura riportata di seguito viene illustrata la funzionalità asincrona di caricamento dell'immagine di un controllo PictureBox.

Per consentire il caricamento asincrono di un'immagine a un controllo PictureBox

  1. Creare un'istanza del componente PictureBox nel form.

  2. Assegnare un gestore eventi all'evento LoadCompleted.

    Verificare in questa posizione la presenza di errori che si potrebbero verificare nel corso del download asincrono. In questa posizione viene eseguita anche la verifica dell'annullamento dell'operazione.

    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. Aggiungere al form due pulsanti, denominati loadButton e cancelLoadButton. Aggiungere i gestori eventi Click per avviare e annullare il download.

    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. Eseguire l'applicazione.

    Durante il download dell'immagine è possibile spostare liberamente il form, ridurlo a icona e ingrandirlo.

Vedere anche

Attività

Procedura: eseguire un'operazione in background

Concetti

Cenni preliminari sul modello asincrono basato su eventi

Altre risorse

Multithreading in Visual Basic