Tutti, conoscevo già l'utilizzo di base dello BackgroundWorker
per gestire più casi di thread in WinForm. E la struttura del codice appare come sotto.Come utilizzare l'evento BackgroundWorker RunWorkerCompleted
Nel thread di applicazione principale. avvia semplicemente BackgroundWork.
if (backgroundWorker1.IsBusy != true)
{
// Start the asynchronous operation.
backgroundWorker1.RunWorkerAsync();
}
Quindi si genera l'evento DoWork
. Quindi possiamo fare qualcosa lì dentro.
private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
BackgroundWorker worker = sender as BackgroundWorker;
......
// report progress.
worker.ReportProgress(iProgress);
....
}
Poi abbiamo solo bisogno di gestire l'evento ProgressChanged
per mostrare lo stato di avanzamento BackgroundWorker.
private void backgroundWorker1_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
//show progress.
resultLabel.Text = (e.ProgressPercentage.ToString() + "%");
}
Dopo DoWork
finito o qualche eccezione è accaduto. l'evento RunWorkerCompleted
verrebbe licenziato.
Here Comes My domande per questo eventi gestiscono. per favore aiutatemi a rivederli. Grazie.
Ho notato che c'è una proprietà denominata "Risultato" nel RunWorkerCompletedEventArgs e
, A cosa serve? Come posso usarlo?
C'è qualche possibilità di ricevere il mio messaggio di eccezione personalizzato invece il e.error
? Se c'è, come si fa?
private void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
if (e.Cancelled == true)
{
resultLabel.Text = "Canceled!";
}
else if (e.Error != null)
{
resultLabel.Text = "Error: " + e.Error.Message;
}
else
{
resultLabel.Text = e.Result.ToString();
}
}
Che dire 'Error'? questo è anche ciò che l'OP chiedeva. –
Risposta aggiornata. Grazie. (Lettura sul telefono e mancata) – SimonGoldstone