Procedura: usare componenti che supportano il modello asincrono basato su eventiHow to: Use Components That Support the Event-based Asynchronous Pattern

Molti componenti consentono di eseguire le attività in modo asincrono.Many components provide you with the option of performing their work asynchronously. I componenti SoundPlayer e PictureBox, ad esempio, consentono di caricare suoni e immagini "in background", mentre l'esecuzione del thread principale procede senza interruzioni.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.

L'uso di metodi asincroni in una classe che supporta il modello asincrono basato su eventi può essere semplice quanto collegare un gestore eventi all'evento MethodNameCompleted del componente, come per qualsiasi altro evento.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. Quando si chiama il metodoMethodNameAsync, l'esecuzione dell'applicazione continua senza interruzioni fino alla generazione dell'evento MethodNameCompleted.When you call the MethodNameAsync method, your application will continue running without interruption until the MethodNameCompleted event is raised. Nel gestore eventi è possibile esaminare il parametro AsyncCompletedEventArgs per determinare se l'operazione asincrona è stata completata o se è stata annullata.In your event handler, you can examine the AsyncCompletedEventArgs parameter to determine if the asynchronous operation successfully completed or if it was canceled.

Per altre informazioni sull'uso dei gestori eventi, vedere Cenni preliminari sui gestori eventi.For more information about using event handlers, see Event Handlers Overview.

La procedura seguente mostra come usare la funzionalità asincrona di caricamento di immagini di un controllo PictureBox.The following procedure shows how to use the asynchronous image-loading capability of a PictureBox control.

Per abilitare un controllo PictureBox per caricare in modo asincrono un'immagineTo enable a PictureBox control to asynchronously load an image

  1. Creare un'istanza del componente PictureBox nel modulo.Create an instance of the PictureBox component in your form.

  2. Assegnare un gestore per l'evento LoadCompleted.Assign an event handler to the LoadCompleted event.

    Controllare gli eventuali errori che si sono verificati durante il download asincrono.Check for any errors that may have occurred during the asynchronous download here. Controllare anche l'eventuale annullamento.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. Aggiungere due pulsanti, denominati loadButton e cancelLoadButton, nel modulo.Add two buttons, called loadButton and cancelLoadButton, to your form. Aggiungere gestori dell'evento Click per avviare e annullare il download.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. Eseguire l'applicazione.Run your application.

    Man mano che il download dell'immagine procede, è possibile spostare liberamente il modulo, ridurlo e ingrandirlo.As the image download proceeds, you can move the form freely, minimize it, and maximize it.

Vedere ancheSee Also

Procedura: Eseguire un'operazione in backgroundHow to: Run an Operation in the Background
Panoramica sul modello asincrono basato su eventiEvent-based Asynchronous Pattern Overview
NON INCLUSO NELLA COMPILAZIONE: Multithreading in Visual BasicNOT IN BUILD: Multithreading in Visual Basic