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 :

Progress barr et problème asynchrone


Sujet :

C#

  1. #1
    Nouveau candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2014
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2014
    Messages : 1
    Par défaut Progress barr et problème asynchrone
    Bonjour,

    J'explique mon contexte dans un projet WPF:
    - Mon application exécute des commandes lors de l'installation
    - J'ai une Progress barre qui se nomme Pb_Installation qui fonctionne durant l'installation.
    - La valeur de la progress barre doit s'incrémenter à chaque exécution d'une commande
    ex : Total des commandes à exécuter 12 donc Pb_Installation à son maximum bloquer à 12, à chaque commande valide la valeur de la Progress barre augmente +1.

    J'ai d'abord utiliser un objet de type BackgroundWorker avec les Procédure DoWork et ProgressedChanged.

    -Mon premier soucis à été que à l'intérieur de la procédure DoWork une exception se lever pour me dire que la PogressBarre était déjà utiliser par un thread.
    -Le second était qu'en passant par l'évènement ProgressedChanged ma progress barre ne s'incrémenter alors jamais.


    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
    string Result = ExecuterCommande(uneCommande, unRole.ListeParametres);
                                NbCommandeExe++;
                                if (Result.Length >= 8)
                                {
                                    if (Result.Substring(0, 8) == "-Erreur-")
                                    {
                                        myParagraph.Inlines.Add(Result.Substring(8, Result.Length - 8) + "\r\n");
                                        ErreurCmd = true;
                                    }
                                    else
                                    {
                                        myParagraph.Inlines.Add(Result + "\r\n");
    //Ici se trouve le cas où la commande est valide et que la progress barre doit s'incrémenter
                                    }
                                }

    Je viens tout juste de réaliser mes premiers test dans le milieu synchrone asynchrone donc je ne connais pas grand chose, si quelqu'un aurai quelque idée à me proposer, merci

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Si tu veux faire de l'asynchrone, je te conseilles de regarder du côté de la classe "Task" si ta version de Framework.NET est au moins à 4.
    Si tu as la v 4.5, "async" et "await" pourraient t'aider encore mieux.

    Regarde aussi attentivement ce fil de discussion.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 26
    Par défaut
    Hello Jordan-chu,

    Est-ce que quelque chose dans ce style pourrait t'aider :

    Considère une form avec un boutton button1 et une ProgressBar progressBar1.

    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
    public class Command
    {
    	/* ... */
    }
     
    private async void button1_Click(object sender, EventArgs e)
    {
    	List<Command> myCommandList = new List<Command>();
    	for (int i = 0; i < 10; i++) myCommandList.Add(new Command());
     
    	button1.Enabled = false;
     
    	await DoWork(myCommandList);
     
    	button1.Enabled = true;
    }
     
    private async Task DoWork(List<Command> commandList)
    {
    	IProgress<int> progress = new Progress<int>((i) => progressBar1.Value = (int)(progressBar1.Maximum * i / commandList.Count));
    	await Task.Run(() => 
    	{
    		int i = 0;
    		foreach(Command c in commandList)
    		{
    			ValidateCommand(c);
    			progress.Report(++i);
    		}
    	});
    }
     
    private void ValidateCommand(Command myCommand)
    {
    	// Faire les calculs avec myCommand...
    	Thread.Sleep(1000); // Pour simuler
    }

Discussions similaires

  1. Réponses: 1
    Dernier message: 11/08/2013, 13h45
  2. [Toutes versions] Progress barre pendant recalcule
    Par CODYCO dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 01/06/2012, 07h52
  3. [XL-2003] Progress barre pendant recalcul
    Par CODYCO dans le forum Macros et VBA Excel
    Réponses: 16
    Dernier message: 03/05/2012, 16h12
  4. Progress Barre & UpdateQuery
    Par Lux interior dans le forum XMLRAD
    Réponses: 13
    Dernier message: 18/02/2005, 18h36

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