2009-06-11 6 views
3

J'ai ce code pour un service Windows que j'écris dans .NET .... Cependant, la fonction TICK n'est jamais exécutée quel que soit l'intervalle que je mets dans les propriétés tmrRun. Qu'est-ce que je rate? Je suis sûr que c'est quelque chose de stupide que je ne vois pas.Pourquoi cette minuterie ne démarre-t-elle pas dans une application de service .net?

Merci Vous

 
Imports System.IO 

Public Class HealthMonitor 

    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. 
     tmrRun.Start() 
    End Sub 

    Protected Overrides Sub OnStop() 
     // Add code here to perform any tear-down necessary to stop your service. 
     tmrRun.Stop() 
    End Sub 

    Private Sub tmrRun_Tick(ByVal sender As Object, ByVal e As System.EventArgs) Handles tmrRun.Tick 
     //DO some stuff 
    End Sub 
End Class 
 
+2

Vous aurez besoin de donner plus d'informations que cela. Vous ne définissez aucun code qui configure votre minuteur (comme dans, à quelle fréquence il s'exécute, etc.) et vous ne nous dites pas quel type de minuteur il est. –

+1

Pourriez-vous afficher le code d'initialisation de la minuterie? Je ne vois pas où vous accrochez l'événement tick ticker à votre fonction membre 'tmrRun_Tick' –

Répondre

0

Avez-vous joint le eventhandler en utilisant AddHandler?

6

Si vous utilisez System.Windows.Forms.Timer qui ne fonctionnera pas dans un service. Regardez dans les deux autres fois que vous pouvez utiliser. NET.

0

Vous utilisez Windows.Form.Time et l'événement Tick qui ne fonctionnera pas dans un service Windows.

Vous devrez System.Timers et l'événement Elapsed pour le faire fonctionner.

3

Vous devez lier vos événements correctement. Vous pouvez utiliser System.Timers.Timer et lier l'événement Elapsed à tmrRun_Tick avant de démarrer la minuterie.

This article explique les différents temporisateurs.

0

Ajoutez un AddHandler à votre OnStart.

Par exemple. :

Dim TimerX as new system.threading.timer 
'You can also use 
'Dim TimerX as new system.timers.timer 
'And you can't use 
'Dim TimerX As new system.windows.forms.timer 
'As it is only available in forms 

public sub onStart(ByVal args as ...) 
AddHandler TimerX.Elapsed, AddressOf TimerX_Tick 
With TimerX 
.interval = 1000 
.enabled = true 
End With 
end sub 

private sub TimerX_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) 
'Tick 
End sub 
6

Cela aide pour moi.

 
Imports System 
Imports System.Timers 

Public Class MyTimers 

    Protected Overrides Sub OnStart(ByVal args() As String) 

     Dim MyTimer As New System.Timers.Timer() 
     AddHandler MyTimer.Elapsed, AddressOf OnTimedEvent 

     ' Set the Interval to 10 seconds (10000 milliseconds). 
     MyTimer.Interval = 10000 
     MyTimer.Enabled = True 
    End Sub 

    Private Shared Sub OnTimedEvent(source As Object, e As ElapsedEventArgs) 
     Console.WriteLine("Hello World!") 
    End Sub 
End Class 
+0

Merci cela m'a aidé aussi :) Super! –

0

j'ai le même problème, mais je suis en utilisant System.Timers.Timer et j'ai manipulé l'événement Elapsed ... travailler dans certaines machines non dans d'autres.

J'ai découvert que mes journaux personnalisés ne fonctionnait pas à l'intérieur des minuteries et les exceptions avalés par la tâche/thread le code courrais.

Utilisez le journal des événements Windows (System.Diagnostic.EventLog) pour être sûr de ce qui se passe. C'est plutôt facile.

Questions connexes