Sdílet prostřednictvím


Threadzeitgeber

Aktualisiert: November 2007

Die System.Threading.Timer-Klasse ist hilfreich, wenn Sie eine Aufgabe in regelmäßigen Abständen in einem separaten Thread ausführen möchten. So können Sie einen Threadzeitgeber z. B. verwenden, um den Status und die Integrität einer Datenbank zu überprüfen oder wichtige Dateien zu sichern.

Beispiel für Threadzeitgeber

Im folgenden Beispiel wird eine Aufgabe alle zwei Sekunden gestartet und die Dispose-Methode, die den Zeitgeber beendet, mit einem Flag initiiert. In diesem Beispiel wird der Status an das Ausgabefenster übermittelt. Blenden Sie daher dieses Fenster durch Drücken von STRG+ALT+O ein, bevor Sie den Code testen.

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

Threadzeitgeber sind besonders nützlich, wenn das System.Windows.Forms.Timer-Objekt nicht verfügbar ist, z. B. beim Entwickeln von Konsolenanwendungen.

Siehe auch

Konzepte

Erweitertes Multithreading mit Visual Basic

Multithreadanwendungen

Referenz

System.Threading

SyncLock-Anweisung