VB.NET Sleep Timer

VB.NET Sleep Timer
VB.NET Sleep Timer

VB.NET Sleep Timer

Du möchtest mit einem VB.NET Sleep Timer Code verzögert ausführen, oder ggf. die Ausführung eines Timers etwas verzögern?

Schön, dass Du diesen Beitrag und somit zu mir gefunden hast, denn hier lernst Du genau das 😉!

Eventuell interessierst Du Dich ja auch noch für folgende Beiträge: VB.NET Timer Countdown, VB.NET Timer zur Laufzeit erstellen, oder auch ein einfaches VB.NET Timer Beispiel.

Szenarien

Im Folgenden Abschnitt, bzw. in den zwei Teilen, erkläre ich die zwei Themen, Welche wir hier behandeln werden.

Timer als Sleep-Funktion benutzen

Im ersten kleinen Teil erkläre ich Dir, wie man einen Timer als Sleep-Funktion verwenden kann.

Das heißt, wir starten den Timer, lassen Ihn ein wenig warten und anschließend den Code unserer Begierde ausführen.

Sei Dir jedoch darüber bewusst, dass das nicht unbedingt die beste Variante ist, diese Problemstellung anzugehen.

Da Du allerdings genau nach dieser Problemstellung gesucht hast, erkläre ich Dir wie Du hier vorgehen könntest, um dein Ziel zu erreichen.

Timer warten lassen

Das nächste Szenario, Welches ich mir bei deiner gewählten Recherche vorstellen könnte wäre, dass Du einen Timer ggf. eine gewisse Zeit warten lassen möchtest.

Wir starten also den Timer, lassen Ihn eine beliebige Zeit laufen und können Ihn dann zu einer gewissen Zeit den nächsten Tickpausieren kannst.

Auch hier gebe ich Dir den Hinweis, dass man wirklich überlegen müsste, ob es je nach Szenario der richtige Ansatz ist.

Timer als Sleep-Funktion

Für das erste Beispiel kannst Du Dir eine ungefähre grafische Oberfläche wie die Kommende hier inkl. einem Timer zusammenklicken.

Den Intervall des Timers kannst Du auf z. B. 3000 Millisekunden, also 3 Sekunden stellen und ansonsten brauchst Du nichts anrühren.

VB.NET Sleep Timer als Sleep Funktion GUI
VB.NET Sleep Timer als Sleep Funktion GUI

Die Textbox kannst Du getrost als Readonly definieren und auch ggf. auf Multline stellen.

Generiere Dir anschließend einen KlickEreignishandler für den Button und wechsle in Diesen.

    Private Sub btnSleepTimer1_Click(sender As Object, e As EventArgs) Handles btnSleepTimer1.Click
        tbTimerOne.Text = "started, waiting for timer tick"
        tmrSleep1.Start()
    End Sub

Der obige Code setzt letztendlich zu Demonstrationszwecken einen initialen Text in die Textbox.

Danach kannst Du Dir einen Tick-Ereignishandler generieren und mit folgenden Code befüllen:

    Private Sub tmrSleep1_Tick(sender As Object, e As EventArgs) Handles tmrSleep1.Tick
        StopAfterFirstTick()
        tbTimerOne.Text = $"{tmrSleep1.Interval}ms passed, yay"
    End Sub

Da ich ein Freund von Robert C. Martins Ansicht „Code muss sich wie ein gutes Buch lesen..“ bin, habe ich die erste Funktionalität des Tick-Handlers in eine passend bezeichnete Methode ausgelagert:

    Private Sub StopAfterFirstTick()
        tmrSleep1.Stop()
    End Sub

Fertig

Wenn Du das bezeichnete Beispiel ausführst, wird die Textbox ihren Text initial bekommen und nach dem gewählten Intervall ihren Text ändern.

Ebenso wird der Timer aufgrund des Stops keine weiteren Tick-Ereignisse auslösen und der Code somit nur einmal ausgeführt.

Timer warten lassen

Das zweite Beispiel lässt einen Timer während der Ausführung ein wenig warten, bzw. zwischen den Tick-Ereignissen pausieren.

Für dieses Beispiel könntest Du folgende GUI bestehend aus einem Label, einer Textbox und 3 Buttons zusammenklicken:

VB.NET Sleep Timer pausieren GUI
VB.NET Sleep Timer pausieren GUI

Lege Dir auch hier einen Timer auf die Form, benenne ihn z. B. als „tmrSleep2“ und stelle den Intervall auf beispielsweise 1000ms, also 1 Sekunde.

Lass die restlichen Eigenschaften des hinzugefügten Timers unangetastet und fahre fort.

Lege nun ein neues Feld, oder eine neue Eigenschaft in der Form an, um später im Tick-Ereignishandler darauf zugreifen und bei Bedarf warten zu können.

Private Property DelaySecondTimer As Boolean

Generiere anschließend die 3 Klick-Ereignishandler für die Buttons:

In diesem ersten Handler hier starten wir den Timer.

    Private Sub btnStartTimerTwo_Click(sender As Object, e As EventArgs) Handles btnStartTimerTwo.Click
        tmrSleep2.Start()
    End Sub

Wenn der Knopf zur Verzögerung geklickt wird, wird unser Flag auf „True“ gestellt und gleich im Tick-Ereignishandler verarbeitet.

    Private Sub btnDelayTimerTwoOnce_Click(sender As Object, e As EventArgs) Handles btnDelayTimerTwoOnce.Click
        DelaySecondTimer = True
    End Sub

Bei dem letzten Knopf stoppen wir letztendlich nur den Timer.

    Private Sub btnStopSecondTimer_Click(sender As Object, e As EventArgs) Handles btnStopSecondTimer.Click
        tmrSleep2.Stop()
    End Sub

Der Tick-Ereignishandler des Timers:

    Private Sub tmrSleep2_Tick(sender As Object, e As EventArgs) Handles tmrSleep2.Tick
        If DelaySecondTimer Then
            tbTimerTwo.AppendText($"ok, skip this tick{Environment.NewLine}")
            DelaySecondTimer = False
            Return
        End If
        tbTimerTwo.AppendText($"Tick{Environment.NewLine}")
    End Sub

Im ersten Schritt des Handlers prüfen wir, ob das Flag für die Verzögerung, bzw. die Pause vorher gesetzt wurde.

Falls das Flag gesetzt wurde, geben wir dies in der Textbox aus und setzen das Flag wieder auf „False“ zurück.

Danach verlassen wir die Sub durch „Early Return“.

Wenn das Flag nicht gesetzt ist, geben wir praktisch eine neue Log-Zeile in der Textbox aus.

Kompletter Code – VB.NET Sleep Timer

Public Class Form1

    ' Sample 1

    Private Sub btnSleepTimer1_Click(sender As Object, e As EventArgs) Handles btnSleepTimer1.Click
        tbTimerOne.Text = "started, waiting for timer tick"
        tmrSleep1.Start()
    End Sub

    Private Sub tmrSleep1_Tick(sender As Object, e As EventArgs) Handles tmrSleep1.Tick
        StopAfterFirstTick()
        tbTimerOne.Text = $"{tmrSleep1.Interval}ms passed, yay"
    End Sub

    Private Sub StopAfterFirstTick()
        tmrSleep1.Stop()
    End Sub

    ' Sample 2

    Private Property DelaySecondTimer As Boolean

    Private Sub btnStartTimerTwo_Click(sender As Object, e As EventArgs) Handles btnStartTimerTwo.Click
        tmrSleep2.Start()
    End Sub

    Private Sub btnDelayTimerTwoOnce_Click(sender As Object, e As EventArgs) Handles btnDelayTimerTwoOnce.Click
        DelaySecondTimer = True
    End Sub

    Private Sub btnStopSecondTimer_Click(sender As Object, e As EventArgs) Handles btnStopSecondTimer.Click
        tmrSleep2.Stop()
    End Sub

    Private Sub tmrSleep2_Tick(sender As Object, e As EventArgs) Handles tmrSleep2.Tick
        If DelaySecondTimer Then
            tbTimerTwo.AppendText($"ok, skip this tick{Environment.NewLine}")
            DelaySecondTimer = False
            Return
        End If
        tbTimerTwo.AppendText($"Tick{Environment.NewLine}")
    End Sub

End Class

Downloads

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert