2009-06-11 4 views
3

私は.NETで書いているWindowsサービス用にこのコードを持っています....しかし、TICK関数はtmrRunプロパティにどの間隔を置いても実行されません。私は何が欠けていますか?私はそれが私が見ていない愚かなものだと確信しています。なぜこのタイマーが.netサービスアプリケーションで起動しないのですか?

 
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

あなたはそれ以上の情報を提供する必要があります。あなたはタイマーを設定するコードを定義しません(タイマーの実行頻度、実行頻度など)。タイマーの種類を教えてください。 –

+1

タイマーの初期化コードを表示できますか?私は、あなたのメンバ関数 'tmrRun_Tick'にタイマーティックイベントをフックするところがわかりません –

答えて

0

あなたはAddHandlerによってのEventHandlerを添付しましたか?ありがとうございましたか

6

サービスで動作しないSystem.Windows.Forms.Timerを使用している場合。 .NETで使用できる他の2回を調べてください。

0

あなたはWindows.Form.TimeとそのTickイベントを使用していますが、これはWindowsサービスでは動作しません。

System.TimersとElapsedイベントが機能するようにする必要があります。

3

イベントを正しくバインドする必要があります。 System.Timers.Timerを使用して、ElapsedイベントをtmrRun_Tickにバインドしてから、タイマーを開始することができます。

This articleは、異なるタイマを説明します。

0

OnStartサブにAddHandlerを追加してください。

例: :

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

これは私に役立ちます。

 
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

これもありがとうございました:)素晴らしい! –

0

私は同じ問題を抱えてきましたが、私はSystem.Timers.Timerを使用していると私はいくつかのマシンではない他人にElapsedイベント...作業を扱ってきました。

私は私のカスタムログはタイマー内部で働いていなかったことが判明し、タスク/コードがで実行されていたスレッドによって飲み込ま例外ました。

するWindowsのイベントログ(System.Diagnostic.EventLog)を使用します何が起こっているか確かめてください。 これはかなり簡単です。

関連する問題