Sub zu bestimmten Zeitpunkt ablaufen lassen

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 7 Antworten in diesem Thema. Der letzte Beitrag () ist von RodFromGermany.

    Sub zu bestimmten Zeitpunkt ablaufen lassen

    Hi,

    wenn ich ein Kommando regelmäßig ablaufen lassen möchte innerhalb eines Programms, wie gehe ich vor? Kann ich Uhrzeiten angeben zu denen ein Sub aufgerufen wird?
    Wenn ich das Ganze in einen Loop packe, dann komme ich ja nicht aus dem Sub heraus.

    Viele Grüße
    @Haudruferzappeltnoch Mach Dir einen Timer mit einem Intervall Deiner gewünschten Toleranz, z.B. 1 Sekunde.
    Vergleiche in der Timer_Tick-Prozedur die Soll-Zeit mit der Ist-Zeit.
    Ist die Soll-Zeit kleiner-gleich der Ist-Zeit, stoppe den Timer und rufe die Prozedur auf.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Doch, natürlich. Der Timer tickt alle x Millisekunden. Und löst dabei ein Event auf, welches dann dann von einem Timer_Tick-EventHandler empfangen wird. So wie der FSW ein Event feuert, welches dazu führt, dass der FSW_Created-EventHandler aufgerufen wird. Der Timer kann das eben in fixen Abständen machen, angefangen bei 1 Millisekunde, hoch zu … alle x Stunden.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    Da musst Du wohl warten, bis @RodFromGermany antwortet. Bei ner langandauernden Sub ist der Compiler nicht in der Lage, das Tick-Event zu verarbeiten. Vielleicht ist auch der Timer nicht in der Lage, das Event zu feuern. Aber kommt auf's gleiche raus:

    VB.NET-Quellcode

    1. Public Class FrmMain
    2. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    3. Timer1.Start()
    4. End Sub
    5. Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick
    6. ListBox1.Items.Add(Date.Now.ToLongTimeString)
    7. End Sub
    8. Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
    9. For i = 0 To 10000000000
    10. Next
    11. End Sub
    12. End Class

    Anbei das Resultat. Erst nachdem die For-Schleife abgearbeitet wurde, wird der Tick-EventHandler wieder aufgerufen und neue Zeiten in die ListBox geschrieben.
    Bilder
    • TicksWithBreaks.png

      815 Byte, 74×213, 35 mal angesehen
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.

    Haudruferzappeltnoch schrieb:

    Warum muss ich den Timer dann stoppen?
    Weil bei jedem nächsten Tick die Bedingung
    Ist die Soll-Zeit kleiner-gleich der Ist-Zeit
    erfüllt ist, so dass bei jedem Tick Deine Prozedur aufgerufen würde.
    Da kannst Du auch ein Flag verwenden oder die Soll-Zeit auf DateTime.MaxValue setzen.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!