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 :

Thread probleme c#


Sujet :

Windows Forms

  1. #1
    Membre régulier
    Inscrit en
    Décembre 2006
    Messages
    256
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 256
    Points : 70
    Points
    70
    Par défaut Thread probleme c#
    Bonjour,

    Je commence actuellement les thread mais j'ai quelques souci :

    Je voudrais lancer un thread au démarrage de mon application qui va lire un fichier txt qui contient un numéro de version. Le thread doit faire cette lecture du fichier txt toute les 1 min.

    Voici le debut de 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
    public class ThreadAMI
        {
            public ThreadAMI()
            {
                Thread myThread;
     
                 myThread = new Thread(new   ThreadStart(ThreadLoop));
     
                // Lancement du thread
                 myThread.Start();
            }
     
            public void ThreadLoop() 
            {
    		// Tant que le thread n'est pas tué, on travaille
                while (Thread.CurrentThread.IsAlive)
                {
                    // Attente de 10000 ms
                    Thread.Sleep(10000 );
     
                    // Lecture du fichier
                    ...
                }
    	   }
        }
    Comment je peux dire a mon thread que des lors de la première lecture du fichier txt d'attendre 1 min puis de recontroler ensuite.
    Dans mon cas le thread s'arrête jamais vu qu'il n'est jamais tué.
    Je ne vois pas comment dire a mon thread de s'arrêter 1 min s'en bloquer le reste de l'application.

    Merci de votre aide

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    537
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 537
    Points : 369
    Points
    369
    Par défaut
    Pourquoi ne pas utiliser un timer qui lui lancera toutes les minutes un thread de lecture.

  3. #3
    Membre régulier
    Inscrit en
    Décembre 2006
    Messages
    256
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 256
    Points : 70
    Points
    70
    Par défaut
    Tu veux dire que dès que mon thread est lancé qu'il a fait la lecture du fchier txt, je le détruit, puis le timer recréer un nouveau thread au bout de 1min afin de refaire le contrôle ?

    Mais le timer ne va t-il pas utiliser trop de mémoire ? Est on obliger de passer par un timer ?

    Merci

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    537
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 537
    Points : 369
    Points
    369
    Par défaut
    Pour effectuer une tâche toutes les minutes ça m'a tout l'être d'être l'outil qu'il faut.
    Après pour la mémoire il faut tester.

  5. #5
    Membre émérite
    Avatar de laedit
    Homme Profil pro
    Consultant études et développement
    Inscrit en
    Décembre 2006
    Messages
    1 344
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Consultant études et développement
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 344
    Points : 2 265
    Points
    2 265
    Par défaut
    Tu pourrais garder le même thread mais dans lequel tu mettras le timer. Et à chaqu tick du timer, tu fais ta vérification.
    Blog - Articles - Framework

    MSDN vous aide, si si, alors n'hésitez pas à y faire un tour avant de poser une question.
    Ah, et n'oubliez pas, Google peut répondre à la majorité de vos questions.

  6. #6
    Membre régulier
    Inscrit en
    Décembre 2006
    Messages
    256
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 256
    Points : 70
    Points
    70
    Par défaut
    Merci pour vos reponses.

    J'ai essayer avec un timer qui se declenche pour le moment toutes les 10 secondes.

    Voici 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
    public class ThreadAMI
        {
            public ThreadAMI()
            {
                 Utils.Session.GetInstance().myThread = new Thread(new ThreadStart(ThreadLoop));
     
                // Lancement du thread
                 Utils.Session.GetInstance().myThread.Start();
            }
     
            public void ThreadLoop() 
            {
                if (Utils.Session.GetInstance().myThread.ThreadState == ThreadState.Running)
                {
                    Thread.Sleep(500);
     
                    StreamReader sr = new StreamReader("C:\\toto.txt");
                    string ligne = sr.ReadLine();
     
                    if (ligne.Trim() == "5")
                    {
                        System.Windows.Forms.MessageBox.Show("ok");
                    }
                }
    	   }
     
            public void KillThread()
            {
                if (Utils.Session.GetInstance().myThread != null)
                {
                    Utils.Session.GetInstance().myThread.Abort();
                }
            }
        }
    Le probleme c'est que toutes les 10 secondes il m'affiche 2 fois le messagebox "ok" ????

    Je ne comprend pas pourquoi ?
    En mode débogage je rentre sur la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if (Utils.Session.GetInstance().myThread.ThreadState == ThreadState.Running)
    mais ensuite il ne va pas dans la boucle mais affiche quand meme le messagebox "ok" puis ensuite il rentre dans la boucle pour m'afficher le message "ok".

    On dirait qu'il boucle 2 fois sur la methode ThreadLoop() ??

    Merci de votre aide

  7. #7
    Expert éminent sénior
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 074
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 074
    Points : 12 120
    Points
    12 120
    Par défaut
    Pourquoi ce "if", vous savez que le thread courant est "running" vu que le code est exécuté par lui.

Discussions similaires

  1. [Thread] Problème de synchronisation
    Par Pe04 dans le forum Concurrence et multi-thread
    Réponses: 12
    Dernier message: 13/12/2005, 11h44
  2. [Thread] Probleme avec mon Timer
    Par Nico66 dans le forum EDT/SwingWorker
    Réponses: 10
    Dernier message: 02/06/2005, 17h10
  3. [Débutant][Threads] Problème de synchronisation
    Par sephile dans le forum Concurrence et multi-thread
    Réponses: 4
    Dernier message: 02/01/2005, 23h29
  4. [THREAD] probleme de pipe
    Par mehdiyassin dans le forum Concurrence et multi-thread
    Réponses: 5
    Dernier message: 01/07/2004, 13h50
  5. Thread Probleme pour l'arret
    Par Raideman dans le forum C++Builder
    Réponses: 3
    Dernier message: 15/04/2004, 12h17

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