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 :

probléme visibilité dans le programme


Sujet :

Windows Forms

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2012
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2012
    Messages : 40
    Par défaut probléme visibilité dans le programme
    Bonjour, je débute complétement dans le C# , et j' ai commencé avec Windows forms à faire quelque petit programme sous IHM.

    Cependant, j' ai un probléme, j' ai créer un thread qui affiche l' heure en direct sur mon programme, mais il ne voit pas la focntion qu' il doit effectuer.
    Je suis un peu perdu avec les static et public.
    Lorsque je créai une fonction static, celle ci ne peut pas voir les éléments créés comme par exemple un label.

    Je vous montre mon programme :

    Le thread heure ne voit pas la méthode afficherheure
    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
    48
    49
     public partial class Form1 : Form
        { 
            Thread heure = new Thread(afficherheure);
     
     
             void afficherheure()
            {
     
                while (true)
                {
                    label2.Text = "" + DateTime.Now;
                }
     
     
            }
     
            public Form1()
            {
                InitializeComponent();
            }
     
             void Form1_Load(object sender, EventArgs e)
            {
     
                heure.Start();
     
            }
     
             void destruction(Thread p)
             {
                 p.Suspend();
             }
     
            private void Form1_Activated(object sender, EventArgs e)
            {
     
            }
     
              void Form1_Deactivate(object sender, EventArgs e)
            {
     
                //heure.Suspend();
            }
     
              private void Form1_MaximumSizeChanged(object sender, EventArgs e)
              {
     
              }
        }
    Merci d' avance pour votre aide cela sera génial !!!

  2. #2
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2012
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2012
    Messages : 40
    Par défaut
    C' est j' ai trouvé la solution à mon problème en bidouillant un peu.
    Mais je me retrouve face à un autre problème :

    J' ai créer une micro application qui utilise 6 thread que je lance en même temps.
    Et mon application met un temps inconsidérable à se lancer et bug sans cesse.
    De plus d' après le gestionnaire de tâche de Windows 8, mon appli prend 75% du processeur. Pouvez vous m' aider à optimiser mon programme ?

    C' est juste en programme pour m' entrainer qui afficher des informations système dans des labels, comme l' année, le mois, jour, heure, minute, et seconde.
    Ces informations sont rafraichis constamment grâce à une boucle infini.

    Je vous donne le 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
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }
     
            private void Form1_Load(object sender, EventArgs e)
            {
                //Thread thmilli = new Thread(milli);
                Thread thseconde = new Thread(seconde);
                Thread thminute = new Thread(minute);
                Thread thheure = new Thread(heure);
                Thread thjour = new Thread(jour);
                Thread thmois = new Thread(mois);
                Thread thannee = new Thread(annee);
                //thmilli.Start();
                thseconde.Start();
                thminute.Start();
                thheure.Start();
                thjour.Start();
                thmois.Start();
                thannee.Start();
     
                //label1.Text = "" + DateTime.Now.Minute;
            }
     
            void seconde()
            {
                while (true)
                {
                    label1.Text = "" + DateTime.Now.Second;
                }
            }
     
            void minute()
            {
                while (true)
                {
                    label2.Text = "" + DateTime.Now.Minute;
                }
            }
     
            void jour()
            {
                while (true)
                {
                    label11.Text = "" + DateTime.Now.Day;
                }
            }
     
     
     
            void heure()
            {
                while (true)
                {
                    label3.Text = "" + DateTime.Now.Hour;
                }
            }
     
            void mois()
            {
                while (true)
                {
                    label5.Text = "" + DateTime.Now.Month;
                }
            }
     
            void annee()
            {
                while (true)
                {
                    label6.Text = "" + DateTime.Now.Year;
                }
            }
     
            void milli()
            {
                while (true)
                {
                    label4.Text = "" + DateTime.Now.Millisecond;
                }
            }
     
     
        }

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    262
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 262
    Par défaut
    Bonjour,

    Il serait utile d'utiliser le composant BackgroundWorker dans ton cas.
    C'est un composant qui lance un thread séparé et exécute ton code.

    Tu as un bon tuto ici : http://glarde.developpez.com/dotnet/bgworker/cs/

  4. #4
    Membre Expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    1 048
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2009
    Messages : 1 048
    Par défaut
    Je veux pas casser ta joie mais si tu désires mettre une "horloge" dans ton programme. Il est propablement plus efficace d'utiliser un objet de type Timer (System ou celui de Winforms) qui avec une durée de tick (1/10 de la plus petite période que tu veux enregistrer c'est à dire 100 ms selon ton ennoncé). Ce timer lancera une procédure s'occupant de mettre à jour les valeur de tes controls.

    L'utilité de la création de thread secondaire est principalement pour décharger le thread principal des calculs, procédures prenant un temps important. Ceci afin que le thread principal puisse se concentrer sur la gestion des controles (il est le seul à pouvoir le faire) pour éviter un effet de fenêtre figée très peu agréable pour l'utilisateur.

    Si l'on reprend ta question, tu devrais avoir un thread qui calcule la date et l'heure courant, puis transmet au thread principal le résultat en lui ordonnant de mettre à jour ses contrôles.

    Il est évident que l'opération de récupération de l'heure n'est pas suffisament complexe pour justifier la création d'un thread.

    Si tu veux voir l'interet de l'utilisation du multithreading, tu peux essayer de compter le nombre de fichier présent sur ton poste de travail (tâche lancée par un click sur un bouton) à l'aide d'une thread principal puis ensuite à l'aide d'un thread spécifique (qui renvoie le nombre de fichier au thread principal pour l'affichage).

  5. #5
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2012
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2012
    Messages : 40
    Par défaut
    bonjour, et merci pour vos réponses !!

    Effectivement lançer un trhread pour afficher l' heure c' est complétement idiot, mais c' était juste pour me familiariser avec les threads.
    En gros ce que je voulais faire c' est que "mon horloge" soit afficher constamment sur mon programme sans affecter le reste.
    Avez vous une idée pour la baisse de performance de mon programme ?

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    262
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 262
    Par défaut
    Bonjour,

    As tu essayé la même méthode que ce post : http://www.developpez.net/forums/d89...el-temps-reel/

  7. #7
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2012
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2012
    Messages : 40
    Par défaut
    Par contre je voulais savoir : J' ai commencé à regarder BackgroundWorker, mais je ne comprend pas trop son rôle.
    Il s' agit d' un thread ?.
    Faut - il que j' en fasse un pour chacun de mes thread ? C' est à dire 6 ?

Discussions similaires

  1. Problème mathématique dans un programme
    Par roobi dans le forum Pascal
    Réponses: 6
    Dernier message: 11/11/2012, 13h25
  2. problème dans un programme
    Par mederic dans le forum C
    Réponses: 5
    Dernier message: 13/05/2006, 17h53
  3. Réponses: 8
    Dernier message: 23/03/2006, 20h30
  4. Réponses: 3
    Dernier message: 09/01/2006, 12h26
  5. [Debutant] Problème de fraction dans un programme
    Par SAKDOSS dans le forum Débuter
    Réponses: 4
    Dernier message: 22/10/2005, 19h38

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