IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Windows Forms Discussion :

[C#]BackGroundWorker, report et dessin.


Sujet :

Windows Forms

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert Avatar de Jinroh77
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Février 2006
    Messages
    1 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence

    Informations forums :
    Inscription : Février 2006
    Messages : 1 964
    Par défaut [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 : 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 ???
    }
    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
     
    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.

  2. #2
    Membre Expert Avatar de Jinroh77
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Février 2006
    Messages
    1 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence

    Informations forums :
    Inscription : Février 2006
    Messages : 1 964
    Par défaut
    Je retirerais rpesque ma question, car j'ai essayé un peu plus (il ne fonctionnait pas au début) le 2° paramètre du ReportProgress : le userStat. Si je met dednas ma liste, et que je la récupère dans la méthode bgwAlgo_ProgressChanged(..).
    Mais je laisserais bien, histoire de me donner un premier oeil sur l'organisation de mon code et ma logique, peut etre pas si bonne.

    Merci

Discussions similaires

  1. Dessiner un tableau avec Reports
    Par kika10 dans le forum Débuter
    Réponses: 5
    Dernier message: 02/06/2010, 21h56
  2. Comment dessiner un tableau dans Quick Report ?
    Par HCN001 dans le forum Débuter
    Réponses: 2
    Dernier message: 19/06/2008, 12h16
  3. Réponses: 1
    Dernier message: 04/05/2007, 16h59
  4. Réponses: 1
    Dernier message: 22/08/2002, 17h00
  5. Réponses: 3
    Dernier message: 12/06/2002, 19h03

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo