スレッド タイマ

更新 : 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 オブジェクトを使用できないときに特に有効です。

参照

概念

Visual Basic での高度なマルチスレッド処理

マルチスレッド アプリケーション

参照

System.Threading

SyncLock ステートメント