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 :

Avancement Progress Bar


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Mai 2009
    Messages
    172
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 172
    Par défaut Avancement Progress Bar
    Bonjour à tous.

    J'ai créé une fonction assez longue à exécuter (qui modifie certains controls lors de son exécution ce qui rend l'utilisation de backgroundworker impossible).

    Et j'ai également créé via mon code (avant) une progressBar.

    Lorsque j'exécute ma fonction la première chose que je fait est rendre visible la progressbar.
    Ensuite durant l'exécution, j'ai mis Avancement.Value += 1; un peu partout.
    J'ai bien mis des try catch pas d'erreurs la fonction s'exécute bien correctement.

    Sauf que je ne vois pas la barre avancer en fait. (pourtant elle reste affichée 3 à 4 secondes, l'exécution de la fonction quoi).

    En fait je vois la progression seulement en cas d'erreur au bout de la 5ème incrémentation de la valeur (erreur dans le code qui précède) et bien la barre va se remplir jusqu'au 4 et m'afficher le message d'erreur.

    J'ai également tenté de rajouter un sleep de 100 ms après chaque incrémentation rien n'y change.
    De ce que j'ai pu lire sur internet ça viendrait du fait qu'on ne doit pas mettre la progressbar dans le meme thread, c'est ça? Comment je pourrais faire alors pour résoudre mon problème? sachant que dans ma fonction je raffraichit les controls de ma page donc pas de backgroundworker possibles ce qui expliquerait en partie le fait que le chargement soit extremement long.

    Voilà j'avoue que ça m'embete un peu, j'espère que vous aurez compris mon problème bien qu'il soit assez complexe à expliquer clairement.

    Merci, r0seBa

  2. #2
    Modérateur
    Avatar de sevyc64
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2007
    Messages
    10 251
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 251
    Par défaut
    COmmence par mettre des Application.DoEvents (ça existe en C# ? ) juste après tes Avancement.Value ....

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 7
    Par défaut
    Effectivement, si tu n'utilise pas un background worker, ta fonction longue à executer bloque complètement tout le processus de traitement des messages de rafraichissement, l'utilisation de Application.DoEvents (qui existe bien en C#) te permettra de palier à ce problème.

  4. #4
    Membre confirmé
    Inscrit en
    Mai 2009
    Messages
    172
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 172
    Par défaut
    Bonjour,
    J'ai rajouté Application.DoEvents() après chaque incrémentation de la valeur de ma progressBar, cependant rien de change.
    Peut etre qu'il y a un rapport avec la définition de ma progressBar(j'en doute):
    Ou je définie juste la valeur max, la location du composant tout en remettant value à 0.

    Enfin dans tous les cas ça ne fonctionne toujours pas.

    Merci de votre aide.

  5. #5
    Membre très actif Avatar de oussi
    Profil pro
    Étudiant
    Inscrit en
    Octobre 2009
    Messages
    192
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2009
    Messages : 192
    Par défaut
    Salut,

    Peut tu montrer ton code?
    Sa va vraiment aider pour t'aider

    Cordialement,

  6. #6
    Membre confirmé
    Inscrit en
    Mai 2009
    Messages
    172
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 172
    Par défaut
    Le problème c'est que justement je peux pas trop il est bien trop long.
    Et si je vous met des extraits ça sera inutile je pense. M'enfin:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Avancement.Location = new Point(25, 25);
                Avancement.Minimum = 0;
                Avancement.Visible = true;
    ça commence comme ça.
    Ensuite j'ai une fonction qui récupère le nombre d'événements à gérer pour trouver la valeur max de ma progressbar.

    Puis mon code est divisé en de longues fonctions et après chaque j'ai un :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Avancement.Value += 1;
    Application.DoEvents();
    Tout à la fin j'ai
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    if(Avancement.Maximum == Avancement.Value)
    {
    Avancement.Visible = false;
    }
    C'est dur d'expliciter plus mon code en fait.

    Sinon j'avais lu sur un forum qu'il fallait utiliser plusieurs threads, sauf que j'arrive pas à transformer les différents tuto sur internet pour que ça soit ma barre qui soit dans le nouveau thread est pas le super code bien long.

    Merci

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

Discussions similaires

  1. Progress Bar ou Slider Avancement vidéo
    Par cjacquel dans le forum MFC
    Réponses: 1
    Dernier message: 12/12/2006, 16h55
  2. [ATL] Petite question sur les progress bar
    Par MrMaze dans le forum MFC
    Réponses: 1
    Dernier message: 06/05/2005, 09h40
  3. [MFC]Changer la couleur d'un progress bar
    Par Deedier dans le forum MFC
    Réponses: 1
    Dernier message: 21/04/2005, 18h39
  4. [VB.NET] Mise en place d'une progress bar
    Par Hoegaarden dans le forum Windows Forms
    Réponses: 14
    Dernier message: 19/10/2004, 09h23
  5. Progress bar au boot
    Par saibe dans le forum Administration système
    Réponses: 2
    Dernier message: 18/08/2003, 10h01

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