Почему этот таймер не запускается в приложении службы .net? - PullRequest
3 голосов
/ 12 июня 2009

У меня есть этот код для службы Windows, которую я пишу в .NET .... Однако функция TICK никогда не выполняется, независимо от того, какой интервал я задаю в свойствах tmrRun. Что мне не хватает? Я уверен, что это что-то глупое, я не вижу.

Спасибо

    
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 ]

6 голосов
/ 01 ноября 2011

Это помогает мне.

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
6 голосов
/ 12 июня 2009

Если вы используете System.Windows.Forms.Timer, который не будет работать в службе. Посмотрите на другие два раза, которые вы можете использовать в .NET.

3 голосов
/ 12 июня 2009

Вы должны правильно связать свои события. Вы можете использовать System.Timers.Timer и связать событие Elapsed с tmrRun_Tick перед запуском таймера.

Эта статья объясняет различные таймеры.

0 голосов
/ 02 августа 2013

У меня та же проблема, но я использую System.Timers.Timer, и я обработал событие Elapsed ... работая на некоторых машинах, а не на других.

Я обнаружил, что мои пользовательские журналы не работали внутри таймеров, и исключения поглотили задачу / поток, в котором выполнялся код.

Используйте журнал событий Windows (System.Diagnostic.EventLog), чтобы быть уверенным, что происходит. Это довольно просто.

0 голосов
/ 12 ноября 2009

Добавьте AddHandler к вашему OnStart sub.

Например. :

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
0 голосов
/ 12 июня 2009

Вы используете Windows.Form.Time и событие Tick этого события, которое не будет работать в службе Windows.

Вам потребуется System.Timers и событие Elapsed, чтобы оно заработало.

0 голосов
/ 12 июня 2009

Вы прикрепили обработчик событий с помощью AddHandler?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...