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 :

Timer inopérant dans service windows


Sujet :

Windows Forms

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    98
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 98
    Points : 48
    Points
    48
    Par défaut Timer inopérant dans service windows
    Bonjour à tous,
    j'ai utilisé le tuto de Selkis pour créer un service windows. Tout se déroule bien, sauf qu'une fois démarré, le timer contenu à l'intérieur semble inactif... Mon erreur doit être tellement grosse que je ne la vois pas ...

    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
     
    Protected Overrides Sub OnStart(ByVal args() As String)
            ' Add code here to start your service. This method should set things
            ' in motion so your service can do its work.
            jevent.WriteEntry("Démarrage de TestServ")
            Timer1.Enabled = True
        End Sub
     
        Protected Overrides Sub OnStop()
            ' Add code here to perform any tear-down necessary to stop your service.
            Timer1.Enabled = False
            jevent.WriteEntry("Arrêt de TestServ")
        End Sub
     
        Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
     
            jevent.WriteEntry("Dans timer")
     
        End Sub
    Dans le journal des évènements, j'ai la trace du start, du stop, jamais du passage dans le timer (fixé à 10s comme dans le tuto)...

    Si quelqu'un a une idée, merci d'avance...

    Robert

  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 : 42
    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
    Points : 39 753
    Points
    39 753
    Par défaut
    Ton timer, ce ne serait pas un System.Windows.Forms.Timer par hasard ? Ce type de timer ne peut être utilisé que dans une application GUI, pas dans un service. Il faut utiliser System.Timers.Timer ou System.Threading.Timer.
    Voir comparatif des différents timers ici :
    http://msdn2.microsoft.com/en-us/magazine/cc164015.aspx

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    98
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 98
    Points : 48
    Points
    48
    Par défaut
    Merci,

    c'était exactement ça! je me suis laissé avoir par VS qui dit qu'on peut ajouter les composants souhaités dans le designer!

    Je vais pouvoir continuer...

    Encore merci,

    Robert

  4. #4
    Futur Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2006
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2006
    Messages : 6
    Points : 7
    Points
    7
    Par défaut
    bonjour,

    dans le tuto de selkis, il n'est pas marqué explicitement d'utiliser un system.timers.timer, mais si on download la source, on s'aperçoit qu'il sagit bien d'un system.timers.timer.

    Le composant n'est pas afficher dans la boite à outil de VS 2003, 2005 ou 2008. Mais on peut le rajouter en choisissant "choir les éléments..." dans le menu contextuel (clique droit sur la boite à outil) et dans l'onglet "Composants .NET Framework", cocher Timer (system.timers.timer).

    Par contre, je rencontre un autre difficulté, le system.timers.timer ne fonctionne pas sous Windows Server 2003 mais très bien sous Windows XP. Après plusieurs recherche sur internet, j'ai découvert que ce bug n'apparait que sur Windows Server 2003 SP1 en multi-processeur or le serveur qui doit fair tourner mon service et sous Windows Serveur 2003 R2 et est bi-pro. Si vous avez une suggestion, je suis preneur. Merci par avance.

  5. #5
    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 : 42
    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
    Points : 39 753
    Points
    39 753
    Par défaut
    Tu peux essayer d'utiliser un System.Threading.Timer, mais il faut vérifier quelles sont ses spécificités... je connais pas trop la différence avec System.Timers.Timer
    Il me semble qu'il y a un article sur developpez.com qui explique la différence entre les 3 types de timer...

  6. #6
    Futur Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2006
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2006
    Messages : 6
    Points : 7
    Points
    7
    Par défaut
    J'ai essayé avec un system.threading.timer, mais je n'arrive pas à m'en servir, je bloque sur le timerCallBack.

    Et après avoir lu pas mal de comparatif sur les 3 différents timer du framework 2, il apparaîtrait que le system.timers.timer et le plus indiqué pour tourner dans un service. Je me trompe peut-être.

    Ce que je veux faire un faite c'est sur le onstart du service lancer un traitement infini. Mais comme on peux par mettre de traitement infini dans le onstart, je suis obligé de démarrer (une fois) un autre thread qui vit ça vit (j'ai essayé avec un system.timers.timer et un backGroundWorker). Je démarre donc le timer pour l'arrêter de suite et ne plus en avoir besoin, c'est pas top comme méthode.

    Si tu as une suggestion, je suis preneur. En attendant que je trouve une solution, je fais tourner le service sur un poste XP et non sur le serveur.

  7. #7
    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 : 42
    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
    Points : 39 753
    Points
    39 753
    Par défaut
    Dans ce cas tu peux t'en sortir sans utiliser de timer...

    Au lieu de faire ton traitement dans l'évènement Elapsed d'un Timer :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Sub timer_Elapsed(sender As Object, e As ElapsedEventArgs)
        Traitement()
    End Sub
    Tu peux le faire dans une boucle qui s'exécute dans un nouveau thread avec un Sleep :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Sub BoucleTraitement()
        While(True)
            Traitement()
            Thread.Sleep(10000) ' 10 secondes d'attente
        End While
    End Sub

  8. #8
    Futur Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2006
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2006
    Messages : 6
    Points : 7
    Points
    7
    Par défaut
    merci, je vais creuser sur d'autre méthode côté multithread.

    je te tiendra au courant

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

Discussions similaires

  1. Problème de timer dans un service window
    Par EmacLi dans le forum Services Windows
    Réponses: 5
    Dernier message: 10/01/2011, 11h43
  2. Crypto et WCF dans Service Windows
    Par maxdwarf dans le forum Services Web
    Réponses: 1
    Dernier message: 09/04/2010, 06h27
  3. timer dans un service windows
    Par yochima dans le forum C#
    Réponses: 5
    Dernier message: 20/08/2009, 10h57
  4. Timer dans un Windows Service
    Par Identifiant dans le forum C#
    Réponses: 5
    Dernier message: 26/05/2009, 15h28
  5. Evènement Firebird dans service Windows
    Par VLDG dans le forum Firebird
    Réponses: 8
    Dernier message: 09/08/2007, 22h28

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