Bonjour,
L'utilisation du BackgroundWorker est assez simple. Les traitements doivent être effectués dans le DoWork et le résultat sera retourné dans le RunWorkCompleted.
Voici l'initialisation simple d'un backgroundworker :
BackgroundWorker bw = new BackgroundWorker();
Son paramétrage :
1 2 3 4 5
| bw.WorkerReportsProgress = true;
bw.WorkerSupportsCancellation = true;
bw.DoWork += new DoWorkEventHandler(bw_DoWork);
bw.ProgressChanged += new ProgressChangedEventHandler(bw_ProgressChanged);
bw.RunWorkerCompleted += new RunWorkerCompletedEventHandler(bw_RunWorkerCompleted); |
WorkerReportsProgress : permet de dire que ton backgroundworker pourra retenir des informations d'avancement du traitement
WorkerSupportsCancellation : permet de dire que le traitement de ton backgroundworker pourra être interrompu
bw.DoWork += new DoWorkEventHandler(bw_DoWork) => l'abonnement au DoWork pour mettre ton traitement dans ta méthode bw_DoWork
Idem pour progresschanged et RunWorkerCompleted
Voici à quoi peuvent ressembler ces méthodes :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
| private void bw_DoWork(object sender, DoWorkEventArgs e)
{
BackgroundWorker worker = sender as BackgroundWorker;
for (int i = 1; (i <= 10); i++)
{
if ((worker.CancellationPending == true))
{
e.Cancel = true;
break;
}
else
{
// Perform a time consuming operation and report progress.
System.Threading.Thread.Sleep(500);
worker.ReportProgress((i * 10));
}
}
}
private void bw_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
if ((e.Cancelled == true))
{
this.tbProgress.Text = "Canceled!";
}
else if (!(e.Error == null))
{
this.tbProgress.Text = ("Error: " + e.Error.Message);
}
else
{
this.tbProgress.Text = "Done!";
}
}
private void bw_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
this.tbProgress.Text = (e.ProgressPercentage.ToString() + "%");
} |
Et pour lancer le traitement :
1 2 3 4
| if (bw.IsBusy != true)
{
bw.RunWorkerAsync();
} |
Et pour finir tu remarqueras que toute cette explication est disponible dans MSDN
Partager