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 : Sélectionner tout - Visualiser dans une fenêtre à part
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