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 :

BackgroundWorker & ProgressBar


Sujet :

C#

  1. #1
    Membre du Club
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Avril 2015
    Messages
    90
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Assistant aux utilisateurs

    Informations forums :
    Inscription : Avril 2015
    Messages : 90
    Points : 49
    Points
    49
    Par défaut BackgroundWorker & ProgressBar
    Bonjour à tous,
    J’exécute le code suivant , mais ça ne fonctionne pas ...Ma progressBar ne change pas...
    Si j'ai bien compris seul le thread principal peux modifier ma progressBar, je dois donc exécuter MaMethode dans un thread secondaire .

    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
     
    BackgroundWorker worker = new BackgroundWorker(); 
     
            public Enregistrement()
            {
                InitializeComponent();          
                worker.DoWork += worker_DoWork;
                worker.RunWorkerCompleted += worker_RunWorkerCompleted;         
                       }
     
      private void Bt_Enregistrement_Click(object sender, RoutedEventArgs e)
            {
    		this.PgB.IsIndeterminate = true;
              	worker.RunWorkerAsync();            
                        }
     
     void worker_DoWork(object sender, DoWorkEventArgs e)
            {
     	Dispatcher.Invoke((Action)(() => { MaMethode(); }));
     		}
     
     void MaMethode()
     {
       //mon code ici
     	}
    Dans le code ci-dessus MaMethode s’exécute et ensuite la progressBar se met en indéterminé...
    Merci pour votre aide..
    Greg

  2. #2
    Membre chevronné
    Homme Profil pro
    edi
    Inscrit en
    Juin 2007
    Messages
    898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : edi

    Informations forums :
    Inscription : Juin 2007
    Messages : 898
    Points : 1 915
    Points
    1 915
    Par défaut
    Dans le worker_DoWork enlève ton appel au Dispatcher, c'est pas fait pour. Ton DoWork doit se concentrer sur la tâche à accomplir, qui sera réalisée en asynchrone. Par contre tu peux y appeler sur le BackgroundWorker la méthode ReportProgress. Celle-ci prend en premier argument un entier de 0 à 100 qui représente le % d'avancement (si tu as un moyen de le calculer) ; le second argument est optionnel et peut être n'importe quel objet représentant l'état du travail en cours.

    Cette méthode va lever l'événement ProgressChanged, auquel tu peux t'abonner, de la même manière que tu t'es abonné au RunWorkerCompleted, si ce n'est qu'au lieu d'être invoqué en fin de traitement ça le sera en étape intermédiaire. Tu recevra un ProgressChangedEventArgs, disposant notamment d'une propriété ProgressPercentage.

    À noter que, tout comme RunWorkerCompleted, ProgressChanged est invoqué sur le Thread d'origine et que tu n'auras pas besoin du Dispatcher, tu pourras accéder directement aux champs de ton formulaire.

Discussions similaires

  1. backgroundworker et progressbar
    Par Neandril dans le forum C#
    Réponses: 3
    Dernier message: 06/09/2018, 01h17
  2. [Débutant] Problème backgroundWorker et progressBar
    Par AlphaMoody dans le forum Windows Forms
    Réponses: 1
    Dernier message: 27/06/2012, 14h30
  3. backgroundworker avec plusieurs progressbar
    Par tortuegenie dans le forum Windows Forms
    Réponses: 1
    Dernier message: 01/06/2011, 16h54
  4. backgroundworker et progressBar
    Par gharras dans le forum C#
    Réponses: 8
    Dernier message: 30/11/2009, 12h23
  5. Réponses: 4
    Dernier message: 24/07/2007, 10h57

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