[C#]BackGroundWorker, report et dessin.
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
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
|
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 ???
} |
Et pour mon algo :
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
|
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.
}
} |
Merci beaucoup pour vos éclaircissements.