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

Windows Forms Discussion :

création d'une progressBar infinie


Sujet :

Windows Forms

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Février 2005
    Messages
    101
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 101
    Points : 64
    Points
    64
    Par défaut création d'une progressBar infinie
    Bonjour,

    Je fais un traitment qui demande un peu d'attente mais je ne peux pas connaitre sa durée. Donc je souahaite créer une progressBar infinie. J'ai commencé à créer quelque chose qui me parait bien mais j'ai une exception qui est retourné correspondant à un thread et je ne sais pas comment le résoudre.

    En fait je créer une classe qui hérite de la class ProgressBar. J'ajoute un timer et
    quand je veux commencer l'animation de ma barre je démarre mon timer et à chaque tick du timer j'ajoute 1 à la valeur de la progressBar.

    Voici mon code:

    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
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
     
    using System;
    using System.Collections.Generic;
    using System.Text;
    using System.Timers;
     
    namespace Gestion_financière
    {
        class InfiniteProgressBar : System.Windows.Forms.ProgressBar
        {
     
            Timer timer;
     
            public InfiniteProgressBar()
            {
                this.Maximum = 100;
                this.Minimum = 0;
                this.Value = 0;
                timer = new Timer();
            }
     
            //Démarre l'animation
            public void start()
            {
                timer.Elapsed += new ElapsedEventHandler(animerBar);
                timer.Interval = 1000;
                timer.Start();
            }
     
            //anime la bar de progression
            private void animerBar(object source, ElapsedEventArgs e)
            {
                if (this.Value == 100)
                    this.Value = 0;
                this.Value++;   //Mon exception survient à ce moment
            }
     
            //Stop l'animation
            public void stop()
            {
                timer.Stop();
                this.Value = 0;
            }
     
     
        }
    }
    Mon exception survient dans la fonction "animBar()" à l'instruction "this.Value++;"

    Voici mon exception:

    InvalidOperationException was unhandled by user code

    Cross-thread operation not valid: Control 'progressBar1' accessed from a thread other than the thread it was created on.
    Si j'ai bien compris ma progressBar ne se trouve pas dans le même thread de mon timer donc il n'arrive à ajouter ma valeur.

    Mais pourtant il ajoute 1 à ma valeur. Donc en fait je pense que je n'ai rien compris.

    D'où vient le problème?

    merci d'avance pour votre aide.

  2. #2
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    166
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 166
    Points : 144
    Points
    144
    Par défaut
    Essaye avec quelque chose du style :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    private void animerBar(object source, ElapsedEventArgs e)
            {
                this.Invoke(new MethodInvoker(delegate()
               {            
                if (this.Value == 100)
                    this.Value = 0;
                this.Value++;   //Mon exception survient à ce moment
               });       
            }
    car en fait ton probleme vient du fait que le thread qui execute le code du timer essaye de modifier un composant qui se trouve dans un autre thread ce qui genere automatiquement une exception. Donc la methode invoke permet d'excuter du code dans le thread ou le composant qui l'appel est creer.

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Février 2005
    Messages
    101
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 101
    Points : 64
    Points
    64
    Par défaut
    Ton code ne compile pas, apparement la fonction delegate n'est pas ce qu'il attend en argument.

    Voici les erreur de compilation

    Error 7 The type or namespace name 'MethodInvoker' could not be found (are you missing a using directive or an assembly reference?) D:\travail\3jFormation\Programme\gestion financière\CSHARP\Gestion financière\Gestion financière\InfiniteProgressBar.cs 35 30 Gestion financière

    Error 8 The best overloaded method match for 'System.Windows.Forms.Control.Invoke(System.Delegate)' has some invalid arguments D:\travail\3jFormation\Programme\gestion financière\CSHARP\Gestion financière\Gestion financière\InfiniteProgressBar.cs 35 14 Gestion financière

    Error 9 Argument '1': cannot convert from 'MethodInvoker' to 'System.Delegate' D:\travail\3jFormation\Programme\gestion financière\CSHARP\Gestion financière\Gestion financière\InfiniteProgressBar.cs 35 26 Gestion financière

  4. #4
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    166
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 166
    Points : 144
    Points
    144
    Par défaut
    Tu es en 2.0 ?

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Février 2005
    Messages
    101
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 101
    Points : 64
    Points
    64
    Par défaut
    oui

    Peut on faire un cast sur une fonction delegate?

  6. #6
    Membre émérite

    Inscrit en
    Novembre 2006
    Messages
    128
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Novembre 2006
    Messages : 128
    Points : 2 624
    Points
    2 624
    Par défaut
    Le plus simple pour répondre ta question initiale c'est de mettre un gif animé !

  7. #7
    Membre expérimenté Avatar de bossun
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    1 359
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2002
    Messages : 1 359
    Points : 1 443
    Points
    1 443
    Par défaut
    http://www.codeproject.com/vb/net/sq...arprogress.asp

    voilà ton bonheur...

    bonne journée
    il vaut mieux prendre son pied que de se prendre la tête!!

    http://bossun.noxblog.com

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Février 2005
    Messages
    101
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 101
    Points : 64
    Points
    64
    Par défaut
    en fait c'est tout bête je n'est pas importer le package.
    Maintenant ca compile et ca marche.

    Je pense qu'une gif animé serait possible mais le fait de faire une progressBar est plus propre et me permet de faire plusieur animation.

    Merci pour votre aide et la rapidité des réponse

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

Discussions similaires

  1. Création d'une ProgressBar spéciale
    Par chaosix dans le forum Android
    Réponses: 4
    Dernier message: 25/11/2013, 08h46
  2. Création d'une ProgressBar loader
    Par eento dans le forum Android
    Réponses: 2
    Dernier message: 21/08/2012, 15h02
  3. [MFC] afficher une ProgressBar dans une barre d'etat
    Par guillaume21 dans le forum MFC
    Réponses: 5
    Dernier message: 30/03/2007, 11h16
  4. comment programmer une progressbar
    Par Choucas dans le forum Paradox
    Réponses: 3
    Dernier message: 13/11/2002, 11h07
  5. [BES] Création d'une variable d'environnement
    Par NGI80 dans le forum Autres
    Réponses: 2
    Dernier message: 17/10/2002, 07h31

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