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 plus ou moins rapide - comportement étrange


Sujet :

C#

  1. #1
    Membre actif Avatar de stolx_10
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2006
    Messages
    374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 374
    Points : 270
    Points
    270
    Par défaut ProgressBar plus ou moins rapide - comportement étrange
    Bonjour

    j'ai créé une Progressbar qui, en fonction du nombre d'enregistrements dans un dataset, se rempli.
    Jusque là tout va pour le mieux.

    Mais j'ai un comportement étrange.

    Lorsque je charge une cinquantaine de lignes, je vois bien ma progressbar se charger au fur et à mesure.
    Quand je charge environ 1500 lignes, et bien cela se rempli à 100% sans étape.


    voilà le bout de code du remplissage de mon dataset, l'appel de la fonction de chargement du progressbar, puis le lien avec mon datagridview
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
      ds.Load(read, LoadOption.PreserveChanges, ds.Tables[0]);
     
                    Cursor.Current = Cursors.WaitCursor;
     
                    DBG_LAgents.SuspendLayout();
     
                    Charge_BarreChargement(ds);
     
                    DBG_LAgents.DataSource = ds.Tables[0];
                    DBG_LAgents.ResumeLayout();
    et voici la fonction
    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
     
     private void Charge_BarreChargement(DataSet dts)
     {
     
                Barre_chargement.Minimum = 1;
                Barre_chargement.Maximum = 1;
                Barre_chargement.Value = 1;
                Barre_chargement.Step = 1;
     
                if (dts.Tables[0].Rows.Count != 0)
                {
                    Barre_chargement.Visible = true;
                    Barre_chargement.Maximum = dts.Tables[0].Rows.Count - 1;
     
                    if (dts.Tables[0].Rows.Count > 1)
                    {
                        for (int x = 0; x <= dts.Tables[0].Rows.Count - 1; x++)
                        {
                            Barre_chargement.PerformStep();
                        }
                    }
                    else
                    {
                        Barre_chargement.Maximum = 1;
                        Barre_chargement.Value = 1;
                    }
                }
                else
                {
                    Barre_chargement.Visible = false;
                }
     
     
    }
    ai-je loupé un truc ?

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

    Citation Envoyé par stolx_10 Voir le message
    ai-je loupé un truc ?
    En effet, tu as loupé quelque chose : ton traitement est fait sur le thread de l'IHM. Pour que tu puisses voir ta barre progresser réellement, ta boucle devrait être dans un thread séparé mais à partir du thread séparé tu dois mettre à jour la barre via une méthode de synchronisation IHM comme "BeginInvoke" de la classe "Control" par exemple.

    En fait, il s'agit de la problématique de garder l'IHM "répondant" qui explique l'existence des classes telles que "Thread", "Task" ou autres "BackgroundWorker".

    Lit cet article par exemple.

  3. #3
    Membre actif Avatar de stolx_10
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2006
    Messages
    374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 374
    Points : 270
    Points
    270
    Par défaut
    Y a t-il la même chose pour Framework 4 ? car là j'ai l'impression que ce n'est qu'à partir de 4.5.

  4. #4
    Invité
    Invité(e)
    Par défaut
    Ah, tu es en Framework 4. C'est vrai que le Framework 4 ne gère pas la "async" et "await" mais les "Task" sont au moins disponibles en v4.
    C'est dommage de ne pas utiliser la v4.5 car la situation s'y prêtait bien!

    Après, une solution rapide serait par exemple de faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    Task tsk = Task.Factory.StartNew(() => { for (int x = 0; x <= dts.Tables[0].Rows.Count - 1; x++)
    {
        this.BeginInvoke((Action)delegate() {Barre_chargement.PerformStep();});
    }
    });
    tsk.Wait();

  5. #5
    Membre actif Avatar de stolx_10
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2006
    Messages
    374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 374
    Points : 270
    Points
    270
    Par défaut
    très bien, cela fonctionne bien mieux.

    Bon par contre, va falloir que je comprenne ce bout de code (surtout la syntaxe), car je n'aurai jamais imaginé sortir ça sans la doc et des recherches.

    J'essaie de coder un peu en autodidacte et autoformation, c'est pas évident.

    En tous les cas merci

  6. #6
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par stolx_10 Voir le message
    Bon par contre, va falloir que je comprenne ce bout de code (surtout la syntaxe), car je n'aurai jamais imaginé sortir ça sans la doc et des recherches.
    Sur développez.com, il y a un cours assez bien fait qui parle entre autres des expressions lambda.

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

Discussions similaires

  1. Un comportement étrange (de plus ?) sur variable
    Par Guigsounet dans le forum Scripts/Batch
    Réponses: 1
    Dernier message: 08/07/2010, 20h14
  2. Disques Flash - Plus ou moins rapide ?
    Par TSalm dans le forum Composants
    Réponses: 2
    Dernier message: 07/02/2008, 10h01
  3. [C#] 3 chiffres ni plus ni moins
    Par niPrM dans le forum Windows Forms
    Réponses: 1
    Dernier message: 02/06/2004, 10h51
  4. Réponses: 2
    Dernier message: 22/09/2003, 11h23

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