Bonjour,
J'expliqe rapidement le problème :
Depuis un form, je lance différent algo de calcul sur une liste de point.
J'ai donc un objet BackgroundWorker à partir duquel je démarre ces algo.
L'idée est de pouvoir avoir le repport de progression de l'algorithme, que j'arrive à peu près à récupérer mais également, et surtout une liste qui va évoluer au fur et à mesure de mon algo.
Pour cela je donne à mon algo le BackgroundWorker et le DoWorkEventArgs depuis mon form.
avec un Worker.ReportProgress(...) je renvois mon pourcentage de progression, mais je ne parviens pas à transmettre au fur et à mesure l'évolution de ma liste.
Voici ce que j'ai dans mon Form
Et pour mon algo :
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 private void bgwAlgo_DoWork(object sender, DoWorkEventArgs e) { BackgroundWorker bw = sender as BackgroundWorker; //Initialisation clAlgoSepEval cAlgoSepEval = new clAlgoSepEval(lListePointsATraiter, bw, e); cAlgoSepEval.TraiteAlgo(); cAlgoSepEval.FillListePointResultat(); e.Result = cAlgoSepEval.plistePointResultat; if (bw.CancellationPending) { e.Cancel = true; } } private void bgwAlgo_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) { if (e.Cancelled) { MessageBox.Show("Operation annulée"); } else if (e.Error != null) { string msg = String.Format("Erreur : {0}", e.Error.Message); MessageBox.Show(msg); } else { MessageBox.Show("Terminé"); } } private void bgwAlgo_ProgressChanged(object sender, ProgressChangedEventArgs e) { progressAlgo.Value = e.ProgressPercentage; //Comment récupérer ma liste ??? }
Merci beaucoup pour vos éclaircissements.
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 public clAlgoSepEval(List<clPoint> lListePointsATraiter, BackgroundWorker Worker, DoWorkEventArgs Event) { //....... this.Worker = Worker; this.Event = Event; } public void TraiteAlgo() { //initialisation faisant des vérification et construisant une List<int> listeSommet //....... CalculAlgo(listeSommet); } public void CalculAlgo(List<int> listeSommet) { if (Worker.CancellationPending) { Event.Cancel = true; } else { int iPourcent = (int)(((double)i * 100) / (double)(listeCycleAtraiter.Count)); Worker.ReportProgress(iPourcent); //Comment envoyer ma liste qui est manipulée dans la suite de cette méthode récurcive. } }
Partager