为什么这个计时器不能在.net服务应用程序中启动?

时间:2009-06-11 20:42:35

标签: .net vb.net windows-services timer

我在.NET中编写了一个Windows服务的代码....但是无论我在tmrRun属性中放置什么时间间隔,TICK函数都不会被执行。我错过了什么?我确信这是我看不到的蠢事。

谢谢

    
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

7 个答案:

答案 0 :(得分:6)

如果您使用的是无法在服务中运行的System.Windows.Forms.Timer。查看另外两次可以在.NET中使用。

答案 1 :(得分:6)

这对我有帮助。

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

答案 2 :(得分:3)

您需要正确绑定事件。在启动计时器之前,您可以使用System.Timers.Timer并将Elapsed事件绑定到tmrRun_Tick

This article解释了不同的计时器。

答案 3 :(得分:0)

您是否使用AddHandler附加了事件处理程序?

答案 4 :(得分:0)

您正在使用Windows.Form.Time及其中的Tick事件,该事件无法在Windows服务中运行。

您必须使用System.Timers和Elapsed事件才能使其正常工作。

答案 5 :(得分:0)

AddHandler添加到您的OnStart

EG。 :

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 :(得分:0)

我遇到了同样的问题,但是我正在使用System.Timers.Timer而且我处理了Elapsed事件...在某些机器上工作而不是在其他机器上工作。

我发现我的自定义日志在定时器内部没有工作,并且代码运行的任务/线程吞没了异常。

使用Windows事件日志(System.Diagnostic.EventLog)确保发生了什么。 这很容易。