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 :

[Timer] Forcer l'exécution d'un ElapsedEventHandler


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    64
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 64
    Par défaut [Timer] Forcer l'exécution d'un ElapsedEventHandler
    Bonjour,

    dans mon service Windows, j'ai un Timer qui est cadencé toutes les N minutes (lorsque ces N minutes sont passées, la méthode Timer_Elapsed(object source, ElapsedEventArgs e) est appelée).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    _Timer = new System.Timers.Timer();
    _Timer.AutoReset = false;
    _Timer.Interval = N_MINUTES * 60 * 1000;
    _Timer.Elapsed += new System.Timers.ElapsedEventHandler(Timer_Elapsed);
    Je communique avec ce service par WCF pour lui envoyer des commandes.
    L'une d'entre elle (Execute()) sert à forcer l'exécution de la méthode normalement appelée toutes les N minutes (Timer_Elapsed(object source, ElapsedEventArgs e)).

    J'ai essayé d'appeler directement cette méthode mais apparemment ce n'est pas possible.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    public void Execute()
    {
             Timer_Elpased(null, null);
    }
    J'ai aussi essayé d'arrêter le Timer, lui mettre un intervalle d'1ms et de le relancer :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    public void Execute()
    {
           lock (LockTimer)
           {
                 _Timer.Stop();
                 _Timer.Interval = 1;
                 _Timer.Start();
           }
    }
    mais j'ai l'impression que des threads se chevauchent et yen a plusieurs qui se lancent...les locks sur l'object LockTimer doivent déconne ou je sais pas.

    Auriez-vous une autre idée ? Invoke, Raise event ou un truc dans le genre ?

    Merci

  2. #2
    Expert confirmé
    Avatar de Skyounet
    Homme Profil pro
    Software Engineer
    Inscrit en
    Mars 2005
    Messages
    6 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Software Engineer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 6 380
    Par défaut
    On évite en général d'appeler les EventHandler à la main.

    Ce que tu peux faire c'est mettre le code utile dans Execute et d'appeler Execute dans Timer_Elapsed. Dès que ton service te réponds tu peux aussi appeler Execute.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    64
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 64
    Par défaut
    Héhé, c'est ce que j'ai fait du coup

    Merci

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

Discussions similaires

  1. [.htaccess] Forcer l'exécution du html en php ?
    Par amarcil dans le forum Apache
    Réponses: 2
    Dernier message: 13/02/2010, 19h22
  2. Forcer l'exécution malgré une "Fatal error"
    Par Galoula dans le forum Langage
    Réponses: 2
    Dernier message: 19/02/2009, 08h29
  3. Réponses: 3
    Dernier message: 27/09/2008, 11h46
  4. comment forcer l'exécution des macros pour une seule base ?
    Par tristan_sauvage dans le forum Access
    Réponses: 4
    Dernier message: 21/08/2006, 11h59
  5. [Système] Forcer l'exécution d'un code php
    Par florent dans le forum Langage
    Réponses: 4
    Dernier message: 02/12/2005, 13h13

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