Problem mit timer

  • VB.NET

Es gibt 14 Antworten in diesem Thema. Der letzte Beitrag () ist von haiyyu.

    Problem mit timer

    Hallo zusammen,

    ich habe ein kleines Problem mit dem Verständnis eines Timers.
    Wenn ich beispielsweise einen Timer mit "Timer1.Start()" in gang setze und dieser ein Interval von 10 sek hat "Timer1.Interval=10000" und dann mit der nächsten Zeile den Timer wieder Stoppe mit "Timer1.Stop(), dann müsste doch die Timerfunktion abgeschlossen sein oder?

    Da ich bei meinem Programm folgendes Problem habe:
    Ich habe den Timer unter die Klickfunktion des MessenButtons in meinem Programm wo ich nach Betätigung des Buttons eine Zeit von 10sek verstreichen lassen will (braucht die Maschine zum vermessen) anschließend lasse ich mein Programm die Daten in ein DGV schreiben. Dies funktioniert auch beim erstenmal aber wenn ich den MessenButton ein zweitesmal drücke bringt er mir die Daten sofort und wartet keine 10 sek.

    VB.NET-Quellcode

    1. Timer1.Start()
    2. Timer1.Interval = 10000
    3. Timer1.Stop()

    oder muss ich den Process für die 10sek extra unterbrechen?
    Was soll der Code bewirken?? Mit diesem Code wird der Timer gestartet, wohl mit dem Initial Interval (100?), dann setzt du das Interval, der Timer läuft aber bereits. Danach beendest du den Timer wieder. Das heißt das Tick-Event wird vermutlich nie ausgeführt, da die 3 Zeilen schneller abgearbeitet werden als der Timer Tickt.
    Ich glaube, dir ist die Funktionsweise eines Timers nicht ganz klar ;)
    der gute sendet in Zeitabschnitten, jeder so lang wie bei Intervall eingegeben, den Eventhandler Timer1.Tick. In einem Sub, der durch diesen Ausgelöst wird (VB erstellt einen solchen automatisch wenn du auf deinen Timer doppeklickst), kannst du dann Code schreiben, der bei jedem Tick, also wiederholt nach jedem Intervall, ausgeführt wird.
    Wenn nun irgendwo in deinem ganzen Programm Timer1.Stop() steht, hört der Timer sofort auf zu ticken.
    Den Intervall soltest du übrigens VOR dem Timerstart festlegen, nicht dannach, denn beim Start ist ja dann noch ein anderer Intervall als der festgelegte vorhanden.
    Der Code, den du da hast, führt ohne Pausen eine Zeile nach der anderen aus, wartet also noch nicht mal auf einen einzigen Tick des Timers.
    Wenn der Timer nur einmal 10000 ms laufen soll, stell einfach den Intervall einfach auf 10000 ms ein, so das jeder Tick im 10000 ms - Abstand ausgeführt werden würde. Beim ersten Tick stoppst du dann den Timer einfach wieder (d.h. der entsprechende Code muss im Tick-Event, s. oben, stehen).

    Hoffe ich konnte helfen ;)



    Mfg, jmb.96 :)
    "People assume that time is a strict progression of cause to effect, but actually, from a non-linear, non-subjective viewpoint, it's more like a big ball of wibbly wobbly, ...timey wimey ...stuff."
    Ok erstmal danke, jetzt weiß ich zumindest das ich die Timerfunktion vollkommen falsch verstanden habe (ich dachte das ist soeine art Pausenfunktion) :whistling: .
    Der Code sollte bewirken, dass der Timer gestartet wird die 10 sek läuft und dann wieder gestoppt wird und wenn der Timer gestoppt ist soll erst der rest des Programms weiterlaufen.
    Letztendlich brauche ich eine 10 sek lange pause in meinem Programm und wollte diese mit diesen drei 3 Zeilen bewirken was mir aber jetzt nach deiner Antwort ziemlich dumm vorkommt.
    Hast du einen Ansatz für mich wie ich eine solche Pause machen kann?

    Edit:
    was ich vielleicht erwähnen sollte ist das er nur eine Pause machen soll wenn ich den Button drücke und ständig
    Hey ^^
    Wenn du 10 Sekunden verstreichen lassen willst:

    Spoiler anzeigen


    VB.NET-Quellcode

    1. Private Sub Buttonklick Handles Button1.click
    2. timer1.intervall = 10000 '<--- Du stellst den Intervall auf 10 Sekunden
    3. timer1.enabled = True '<--- Du aktivierst den Timer
    4. End Sub
    5. Private Sub Timertick Handles timer1.tick
    6. 'Wenn die 10 Sekunden vorbei sind, passiert folgendes...: (Hier kannst du übrigens deine Befehle reintun, also das was passieren soll)
    7. timer1.enabled = False '<--- Timer nach den 10 Sekunden wieder stoppen; Übrigens wird dadurch das Intervall wieder auf 0 gesetzt
    8. End Sub




    Hoffe ich konnte dir helfen^^

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Skype“ ()

    meine (nicht gern gesehene) Pausenfunktion:

    Aufruf: Pause 10


    VB.NET-Quellcode

    1. Sub Pause(ByVal pau As Single)
    2. Dim start, finish As Single
    3. start = Microsoft.VisualBasic.DateAndTime.Timer
    4. finish = start + pau
    5. Do While Microsoft.VisualBasic.DateAndTime.Timer < finish
    6. Application.DoEvents()
    7. Loop
    8. End Sub


    mfg
    Pause machen ist fürn Computer prinzipiell nicht drin, bzw. nur mit unerwünschten Nebenwirkungen.

    Du kannst eine Methode periodisch starten (mittels Timer) - dann hast du zwischen den Aufrufen eine Pause.

    Oder du bastelst iwie eine Endlos-Methode, die gelegentlich auf die Uhr guckt, und nach mw. 10 Sekunden aufhört.

    Oder eine Endlos-Methode im NebenThread, die gelegentlich einen Boolean abfragt, und dann zurückkehrt. (und dann kannste einen Timer starten, dasses in 10s wieder losgeht).

    Aber es ist müßig, dir raten zu wollen, wenn man raten muß, was du ühaupt machen willst.
    Verdammt dir wollte ich doch garnich helfen xD.. :D spaß^^

    EDIT: Wie schon gesagt, ich rate dir zu meinem Beispiel. Führe deine Befehle im Tick Event aus. Wozu willst du überhaupt dein Programm pausieren?
    Es kann doch solange ganz normal weiterlaufen, aber der Befehl wird wie gesagt erst nach 10 Sekunden ausgeführt. Du musst ihn nur ins .Tick Event reinschreiben.^^

    Mfg

    Skype
    Vielen Dank für eure Hilfe.

    Das was ich programmiere wird eine Datenbank für eine Messmaschine. Welche für das vermessen eines Ringes 10sek benötigt deshalb die Pause um die richtigen Werte und nicht die des vorgänger Ringes abzulesen und zu speichern.

    Edit:
    Ja du konntest mir helfen ich hatte nämlich vorher auch schon eine ähnliche Idee wie dein Tick Event nur ich konnte es nicht umsetzen, da ich komplett falsch an die Sache rangegangen bin und nicht meine folgebefehle rein packen wollte sonder die Timer Zeilen die ja leider keinen Sinn ergaben.
    Wie bekommst du die Werte denn? RS232? USB? Musst du die Anfrage "gib mir werte" selbst starten oder wäre ggf. sogar mit Event möglich, heißt wenn die Maschine fertig ist wird ein Event gefeuert und dadrin reagierst du drauf und ließt die Werte aus.
    Die Maschine speichert die Werte von sich aus schon in einer Access Tabelle nur leider ohne Artikelnummer, Lieferscheinnummer und Toleranzabfrage (die Werte sind später nicht mehr zuzuorden) und deshalb werden die momentan noch alle händisch abgeschrieben was ein enormer Zeitaufwand ist. Mein Programm hat die Aufgabe diese Werte aus der Access Tabelle zu nehmen und unter dem Artikel mit allen nötigen Informationen zu speichern.
    Zum Glück ist die Access Tabelle da und ich muss nicht über die von euch erwähnten Schnittstellen zugreifen ich hab mich darüber nämlich mal am Anfang ein bisschen schlau gemacht und das hat meinen Horizont bei weiten überschritten.