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 :

multithread et timer [Débutant]


Sujet :

C#

  1. #1
    Membre confirmé

    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    69
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 69
    Billets dans le blog
    1
    Par défaut multithread et timer
    Bonjour,
    J'essaie de comprendre comment peut marcher un timer appelé dans la thread principale (ok, pas de probleme) et dans une nouvelle thread (ne semble pas marcher).

    Voici le code, (j'ai essayé de faire simple pour que ce ne soit pas trop long):
    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
        public partial class Form1 : Form
        {
            private Thread myThread = null;
     
            public Form1()
            {
                InitializeComponent();
            }
     
            // 1er bouton: pas de probleme de timer
            private void button1_Click(object sender, EventArgs e)
            {
                this.timer1.Interval = 10000;
                this.timer1.Enabled = true;
            }
     
            // 1eme bouton: probleme de timer
            private void button2_Click(object sender, EventArgs e)
            {
                this.myThread = new Thread(new ThreadStart(this.testTimer));
                this.myThread.Start();
     
            }
     
            // autre trhead
            private void testTimer()
            {
                this.timer1.Interval = 10000;
                this.timer1.Enabled = true;
            }
     
            // fin timer
            private void timer1_Tick(object sender, EventArgs e)
            {
                this.timer1.Enabled = false;
                Debug.WriteLine("timer1_Tick");
            }
        }
    Est-ce que vous sauriez m'expliquer pourquoi j'ai bien le message "timer1_Tick" quand j'appuie sur le bouton 1 mais pas quand j'appuie sur le bouton 2 s'il vous plait. Toute correction est aussi la bienvenue.

    Merci
    Mich

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Le timer que tu utilises (System.Windows.Forms.Timer) est fait pour s'utiliser dans le thread principal (thread UI), et se base sur les messages Windows traités par la boucle de messages sur le thread UI. Si tu le lances sur un thread qui n'a pas de boucle de messages, ça ne peut pas fonctionner.

    Si tu veux tu peux utiliser un autre type de timer (System.Threading.Timer ou System.Timers.Timer), qui ne dépendent pas de l'UI.

  3. #3
    Membre confirmé

    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    69
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 69
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par tomlev Voir le message
    Le timer que tu utilises (System.Windows.Forms.Timer) est fait pour s'utiliser dans le thread principal (thread UI), et se base sur les messages Windows traités par la boucle de messages sur le thread UI. Si tu le lances sur un thread qui n'a pas de boucle de messages, ça ne peut pas fonctionner.

    Si tu veux tu peux utiliser un autre type de timer (System.Threading.Timer ou System.Timers.Timer), qui ne dépendent pas de l'UI.
    Merci beaucoup, je ne l'aurais jamais deviné tout seul ...

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

Discussions similaires

  1. multithreading et timer
    Par lilington dans le forum Débuter
    Réponses: 8
    Dernier message: 21/11/2013, 04h12
  2. Problème gestion timer multithread
    Par jimmylekib dans le forum C++
    Réponses: 3
    Dernier message: 04/06/2008, 15h49
  3. Timer de précision
    Par guigui dans le forum MFC
    Réponses: 1
    Dernier message: 04/12/2002, 15h21
  4. Timer en µsecondes
    Par Dagobert dans le forum x86 16-bits
    Réponses: 3
    Dernier message: 25/11/2002, 00h59
  5. Multithreading sous HP Ux 11
    Par pykoon dans le forum Autres éditeurs
    Réponses: 1
    Dernier message: 18/10/2002, 23h36

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