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
Creare un'istanza del componente PictureBox nel form.
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"); } }
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(); }
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