Partager via


Composants Timer thread

Mise à jour : novembre 2007

La classe System.Threading.Timer est utile pour exécuter périodiquement une tâche sur un thread séparé. Par exemple, vous pouvez employer un composant Timer thread pour vérifier l'état et l'intégrité d'une base de données ou pour sauvegarder des fichiers vitaux.

Exemple Timer Thread

L'exemple ci-après lance une tâche toutes les deux secondes et utilise un indicateur pour activer la méthode Dispose qui arrête la minuterie. Cet exemple publie l'état dans la fenêtre de sortie que vous devez rendre visible. Pour ce faire, appuyez sur CTRL+ALT+O avant de tester le code.

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

Les composants Timer thread sont particulièrement utiles lorsque l'objet System.Windows.Forms.Timer n'est pas disponible, par exemple lorsque vous développez des applications console.

Voir aussi

Concepts

Multithreading avancé avec Visual Basic

Applications multithread

Référence

System.Threading

SyncLock, instruction