BackGroundWorker et traitements génériques
Bonjour,
Je suis en train de faire une appli où des traitements de plusieurs secondes seront effectués. Je me remet donc à travailler avec le composant BackGroundWorker et avec une ProgressBar pour montrer que les traitements sont en cours.
Comme le BGW sera utilisé à plusieurs moments dans l'utilisation du logiciel, j'ai eu l'idée de créer un objet MyBackGroundWorker afin de faire quelque chose de générique. C'est peut-être une mauvaise idée.. Vous me direz si ça vous choque.
Voici l'objet en question:
Code:
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 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64
| public class MyBackGroundWorker
{
private ProgressBar progressBar = null;
private bool WorkCompleted = false;
private BackgroundWorker worker = null;
public MyBackGroundWorker(ProgressBar _progressBar)
{
this.progressBar = _progressBar;
worker = new BackgroundWorker();
worker.WorkerReportsProgress = true;
worker.WorkerSupportsCancellation = true;
worker.ProgressChanged += worker_ProgressChanged;
worker.DoWork += worker_DoWork;
worker.RunWorkerCompleted += worker_RunWorkerCompleted;
}
public void Start()
{
worker.RunWorkerAsync();
}
public void Stop()
{
if (worker.IsBusy)
worker.CancelAsync();
}
private void worker_DoWork(object sender, DoWorkEventArgs e)
{
int i = 0;
while (!this.WorkCompleted)
{
if (worker.CancellationPending)
break;
worker.ReportProgress(i);
Thread.Sleep(300);
if (i < 100)
i += 5;
else
i = 0;
}
}
private void worker_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
this.progressBar.Value = e.ProgressPercentage;
}
private void worker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
this.progressBar.Value = 0;
}
} |
Comme vous pouvez voir, j'ai liée une ProgressBar à l'objet pour voir l'avancement du traitement.
J'ai deux questions:
- Comment passer une méthode (d'une manière générique) à l'objet pour que le BGW fasse le traitement en question?
- Comment mettre à jour la variable MyBackGroundWorker.WorkCompleted à jour une fois que le traitement est fini?
J'ai volontairement simplifié l'objet car tout les essais que j'ai fait non pas été concluant..
Merci de votre aide