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

C# Discussion :

ProgressBar montrant evolution taches asynchrone


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre du Club
    Inscrit en
    Octobre 2008
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 6
    Par défaut ProgressBar montrant evolution taches asynchrone
    Bonjour à tous,
    Quelqu'un aurait une idée de comment avec un progressBar on peut montrer l'evolution d'une tache asynchrone(ThreadPool ou thread simple) en C# ?

    Merci de m'aider.

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 27
    Par défaut
    Bonjour,

    Je vais te donner une solution que j'utiliserais, mais il y a surement une meilleur solution :

    Dans ton Thread qui traite ta tâche asynchrone, tu déclare un évènement et un délégate :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    public delegate void onEventHandler(object sender, int increment);
    public event onEventHandler OnStateChanged;
    Puis durant le processus du thread, tu lances l'évènement pour indiquer une progression :

    Puis dans ton programme tu crées ton thread asynchrone et tu écoute l'évènement OnStateChanged :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    TonThread.OnStateChanged += new TonThread.onEventHandler(fonctiongerantlevenement);
    private void fonctiongerantlevenement(object sender, int increment)
    {
    this.invoke(new StateChange(change),increment);
    }
    private void change(int incr)
    {
    taProgressBar.Value+=incr;
    }
    Et tu déclare le délégate dans ton programme :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    private delegate void StateChange(int i);
    Voilà, j'espère que quelqu'un te postera une réponse plus simple.

    Cordialement.

  3. #3
    Membre confirmé Avatar de thelpi
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    217
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Deux Sèvres (Poitou Charente)

    Informations forums :
    Inscription : Décembre 2007
    Messages : 217
    Par défaut
    Bonjour,

    pour compléter la réponse précédente, la classe BackgroundWorker permet de gérer des actions background très simplement, et implémente déjà tout le code proposé par neoprime1988.

    Il suffit de
    - mettre la propriété WorkerReportsProgress à True
    - d'implémenter le corps de la méthode suivante ( dans cette méthode, la progressbar est modifiée avec l'argument evt.ProgressPercentage) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    private void OnReportProgress(object sender, ProgressChangedEventArgs evt)
    - Définir "OnReportProgress" comme méthode à passer à l'évènement ProgressChanged
    - Appeler à plusieurs reprises dans le code background l'évènenemt ReportProgress.

  4. #4
    Membre du Club
    Inscrit en
    Octobre 2008
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 6
    Par défaut
    slt,
    je m'excuse de ne pas avoir donner suite à la discussion plus tôt (débordé par le boulot).
    bref, j'ai procédé par la l'approche backgroundWorker de thelpi qui semble la plus simple.
    ce que j'essaie de faire c'est juste une une boucle de 1 à 10 000 et voir son évolution via un Progressbar pour tester.
    ce que j'arrive pas à bien cerner c'est:
    - Appeler à plusieurs reprises dans le code background l'évènenemt ReportProgress.

    sois plus explicite stp!!!

  5. #5
    Membre confirmé Avatar de thelpi
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    217
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Deux Sèvres (Poitou Charente)

    Informations forums :
    Inscription : Décembre 2007
    Messages : 217
    Par défaut
    Salut,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    private void MyMethodAsynchronAPasserALevenementDoWorkDuBackgroundWorker(object sender, DoWorkEventArgs evt)
    {
         for (int i = 0; i <100; i++)
         {
              ProgressChanged(sender, new ProgressChangedEventArgs(i, null));
         }
    }
     
    private void MyMethoQuiMetAJourLaProgressBarADefinirPourLevenementProgessChangedDuBackgroundWorker(object sender, ProgressChangedEventArgs evt)
    {
        this.myProgressBar.Value = evt.ProgressPourcentage;
    }

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 1
    Dernier message: 03/02/2014, 11h03
  2. Tache Asynchrone et AlertDialogue ?
    Par rosalys dans le forum Android
    Réponses: 1
    Dernier message: 02/04/2013, 12h53
  3. Ouverture base de donnée dans une tache asynchrone
    Par freaks dans le forum Android
    Réponses: 4
    Dernier message: 26/10/2012, 20h19
  4. evolution de progressbar dans usf
    Par casefayere dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 04/12/2007, 15h44
  5. Réponses: 6
    Dernier message: 25/03/2002, 21h11

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