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

Langages Discussion :

gestion des thread en C#


Sujet :

Langages

  1. #1
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2016
    Messages
    132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2016
    Messages : 132
    Points : 59
    Points
    59
    Par défaut gestion des thread en C#
    Bonjour,

    Je gère trois tâche en permanence :
    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
     //Instanciation des Timers
            static System.Timers.Timer TimeToReloadValues;
            //static System.Timers.Timer Clock;
            static System.Threading.Timer Clock;
            //static System.Timers.Timer TimeToRefresh;
            static System.Threading.Timer TimeToRefresh;
            //TODO: Que pour le serveur !!!!!
            static System.Timers.Timer TimeToReset;
     
    TimeToRefresh = new System.Threading.Timer(Callback, null, 500, 1);
        private void Callback(Object state)
            {
                // Long running operation
                TimeToRefresh.Change(100,500);//Timeout.Infinite
     
                RefreshMainForm(state );
            }
    Si jamais une tâche ne réponds pas, j'ai plus la main sur le programme.

    Pourriez-vous m'aider à résoudre ce problème svp?

    Merci!

  2. #2
    Expert éminent sénior

    Avatar de François DORIN
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juillet 2016
    Messages
    2 760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Charente Maritime (Poitou Charente)

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

    Informations forums :
    Inscription : Juillet 2016
    Messages : 2 760
    Points : 10 541
    Points
    10 541
    Billets dans le blog
    21
    Par défaut
    Bonjour,

    Tu utilises deux types de timer différent. Pourquoi ?

    Ensuite, où et comment est réalisée l’instanciation de tous tes timers ?

    j'ai plus la main sur le programme.
    Qu'est-ce que cela signifie-t-il ? Interface graphique qui gèle ?
    François DORIN
    Consultant informatique : conception, modélisation, développement (C#/.Net et SQL Server)
    Site internet | Profils Viadéo & LinkedIn
    ---------
    Page de cours : fdorin.developpez.com
    ---------
    N'oubliez pas de consulter la FAQ C# ainsi que les cours et tutoriels

  3. #3
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2016
    Messages
    132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2016
    Messages : 132
    Points : 59
    Points
    59
    Par défaut
    les timers traitent des tâches : par exemple , TimeToRefresh permet de rafraîchir les valeurs des données de plusieurs colonnes d'un GataGridView et un autre timer qui permet d'afficher l'heure et la date.
    Oui, l’interface graphique gèle à chaque fois qu'il exécute une tâche.

    Merci de ta réponse.

  4. #4
    Expert éminent sénior

    Avatar de François DORIN
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juillet 2016
    Messages
    2 760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Charente Maritime (Poitou Charente)

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

    Informations forums :
    Inscription : Juillet 2016
    Messages : 2 760
    Points : 10 541
    Points
    10 541
    Billets dans le blog
    21
    Par défaut
    Si l'opération est longue, il faut la traiter non pas de le timer, mais dans une tâche à part. Attention, la sémantique ici est importante, d'où les mots en gras.

    Je t'invite à jeter un oeil sur la série d'article que je suis en train d'écrire, sur l'utilisation du pool de threads. Tu peux y accéder via ma page perso (http://fdorin.developpez.com/).

    L'idée en gros est donc :
    1. Dans le timer, de lancer la tâche ;
    2. D'exécuter la tâche dans un thread à part ;
    3. A la fin de la tâche, mettre à jour ton interface graphique, en utilisant le patron d'invocation


    Le soucis que tu as actuellement, c'est que le timer s'exécute sur le thread graphique. Donc s'il prend du temps, cela "gèle" ton interface. D'où la nécessité de passer par un thread à part (par exemple, en utilisant le pool de threads).
    François DORIN
    Consultant informatique : conception, modélisation, développement (C#/.Net et SQL Server)
    Site internet | Profils Viadéo & LinkedIn
    ---------
    Page de cours : fdorin.developpez.com
    ---------
    N'oubliez pas de consulter la FAQ C# ainsi que les cours et tutoriels

  5. #5
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2016
    Messages
    132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2016
    Messages : 132
    Points : 59
    Points
    59
    Par défaut
    Merci pour ta réponse!

    C'est génial!

    J'essai de changer mes Timer Thread en thread mais je n'arrive pas:

    mes timer thread servent à faire des callback:

    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
         static System.Timers.Timer TimeToReloadValues;
            //static System.Timers.Timer Clock;
            static System.Threading.Timer Clock;
     
            //static System.Timers.Timer TimeToRefresh;
            static System.Threading.Timer TimeToRefresh;
            //TODO: Que pour le serveur !!!!!
            static System.Timers.Timer TimeToReset;
         private void Callback(Object state)
            {
                // Long running operation
                Task asyn =
                 Task.Factory.StartNew(
                     () =>
                     {
                         TimeToRefresh.Change(60000, 1000);//Timeout.Infinite 100
     
                         RefreshMainForm(state);
                     });
            }
     
       private void CallbackClock(Object state)
            {
     
                      // Long running operation
                      Clock.Change(10000, 1000);//Timeout.Infinite
     
                      ClockTick(state);
     
            }
     
                 Clock = new System.Threading.Timer(CallbackClock, null, 1000, 1000);//Timeout.Infinite
     
     
                MainFormRefresh += new EventHandler<EventArgs>(ChargementDataGridView);
     
                //Timer pour rafraichir le formulaire
                // TimeToRefresh = new System.Timers.Timer(40000);
                TimeToRefresh = new System.Threading.Timer(Callback, null, 50000, 1000);//Timeout.Infinite
    Pourrais-tu m'aider à changer l'appel des callback timer en thread?

    Merci!

  6. #6
    Expert éminent sénior

    Avatar de François DORIN
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juillet 2016
    Messages
    2 760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Charente Maritime (Poitou Charente)

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

    Informations forums :
    Inscription : Juillet 2016
    Messages : 2 760
    Points : 10 541
    Points
    10 541
    Billets dans le blog
    21
    Par défaut
    Pourtant, de ce que je vois, tu as réussi, au moins pour la méthode Callback. Il suffit de mettre le code initial de tes callback dans des Task, via par exemple, Task.Factory.StartNew.

    Quel problème rencontres-tu pour le faire ?
    François DORIN
    Consultant informatique : conception, modélisation, développement (C#/.Net et SQL Server)
    Site internet | Profils Viadéo & LinkedIn
    ---------
    Page de cours : fdorin.developpez.com
    ---------
    N'oubliez pas de consulter la FAQ C# ainsi que les cours et tutoriels

  7. #7
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2016
    Messages
    132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2016
    Messages : 132
    Points : 59
    Points
    59
    Par défaut
    L'interface se bloque pour 10 secondes à chaque fois qu'il exécute le callback.

    Je ne vois pas pourquoi!

    une aide?

Discussions similaires

  1. gestion des threads
    Par yanis97 dans le forum Langage
    Réponses: 6
    Dernier message: 20/04/2006, 12h41
  2. Gestion des Threads
    Par Nalfouille dans le forum MFC
    Réponses: 3
    Dernier message: 05/04/2006, 16h29
  3. Gestion des threads
    Par yanis97 dans le forum C++
    Réponses: 6
    Dernier message: 08/03/2006, 09h39
  4. GEstion des thread
    Par Julien Dufour dans le forum Access
    Réponses: 8
    Dernier message: 06/10/2004, 14h28
  5. [reseaux] Gestion des threads en perl
    Par totox17 dans le forum Programmation et administration système
    Réponses: 2
    Dernier message: 28/11/2002, 09h40

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