スレッド タイマ
更新 : 2007 年 11 月
System.Threading.Timer クラスは、タスクを別々のスレッドで定期的に実行するのに便利です。たとえば、スレッド タイマを使用すると、データベースのステータスと整合性をチェックしたり、重要なファイルをバックアップしたりできます。
スレッド タイマの例
2 秒ごとにタスクを起動し、フラグを使用して Dispose メソッドでタイマを停止する例を次に示します。この例は、ステータスを出力ウィンドウに出力します。そのため、コードをテストする前に、Ctrl + Alt + O キーを押して、このウィンドウを表示する必要があります。
Class StateObjClass
' Used to hold parameters for calls to TimerTask
Public SomeValue As Integer
Public TimerReference As System.Threading.Timer
Public TimerCanceled As Boolean
End Class
Sub RunTimer()
Dim StateObj As New StateObjClass
StateObj.TimerCanceled = False
StateObj.SomeValue = 1
Dim TimerDelegate As New Threading.TimerCallback(AddressOf TimerTask)
' Create a timer that calls a procedure every 2 seconds.
' Note: There is no Start method; the timer starts running as soon as
' the instance is created.
Dim TimerItem As New System.Threading.Timer(TimerDelegate, StateObj, _
2000, 2000)
StateObj.TimerReference = TimerItem ' Save a reference for Dispose.
While StateObj.SomeValue < 10 ' Run for ten loops.
System.Threading.Thread.Sleep(1000) ' Wait one second.
End While
StateObj.TimerCanceled = True ' Request Dispose of the timer object.
End Sub
Sub TimerTask(ByVal StateObj As Object)
Dim State As StateObjClass = CType(StateObj, StateObjClass)
' Use the interlocked class to increment the counter variable.
System.Threading.Interlocked.Increment(State.SomeValue)
System.Diagnostics.Debug.WriteLine("Launched new thread " & Now)
If State.TimerCanceled Then ' Dispose Requested.
State.TimerReference.Dispose()
System.Diagnostics.Debug.WriteLine("Done " & Now)
End If
End Sub
スレッド タイマは、コンソール アプリケーションを開発するときなど、System.Windows.Forms.Timer オブジェクトを使用できないときに特に有効です。