Toggle-Button - bzw. wie aktualisiert sich der Wert einer Variablen

  • VB.NET

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

    Toggle-Button - bzw. wie aktualisiert sich der Wert einer Variablen

    Hallo !

    Ich möchte gern eine Do Until - Loop Prozedur mittels eines Toggle-Buttons vorübergehend anhalten können.
    Dazu habe ich hinter den Anfang der Do Until-Schleife eine while-Schleife gesetzt, die den Zustand des Toggle-Buttons abfragt.


    Do Until sr.Peek() = -1 'Wenn das Ende der Datei erreicht ist, wird -1 zurückgegeben
    While toggle = True 'Es soll nur weitergehen, solange der "Pause"-Button nicht betätigt ist.
    sendestring = sr.ReadLine() 'zeilenweise aus Datei einlesen
    End While 'Ende der While-Schleife, mit welcher die Sende-Schleifer per Pausen-Button unterbrochen werden kann.
    Loop

    Der Toggle-Button toggelt auch.

    Jedenfalls funktioniert es nicht. Entweder es hängt sich auf, weil ja irgendwo noch "Loop" steht, oder es reagiert nur im Moment des Startes auf den Zustand des Toggle-Buttons.
    Hat jemand eine Idee ?

    Gruß Tilmann
    Du möchtest also einen Stream lesen und diesen Vorgang unterbrechen bzw. anhalten, solange der Toggle-Button gedrückt ist?
    Das Problem ist dabei, dass wenn du den Lesealgorithmus im Thread deines Fensters laufen lässt, du keine Benutzereingaben abfangen kannst, bis er damit fertig ist.
    Wenn ich das Problem richtig verstanden habe, würde ich das in einen neuen Thread packen und diesen bei Betätigen des Toggle-Buttons anhalten bzw. beim Loslassen wieder starten.
    Dafür kannst du dir das mal anschauen: stackoverflow.com/questions/38…spend-and-resume-a-thread
    edit: und auch das hier: albahari.com/threading/
    lg

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

    Tilmann schrieb:

    Hat jemand eine Idee ?
    Was soll denn Dein Programm machen, während es auf die Freigabe wartet?
    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!
    Hi Rod,

    mein Programm liest zeilenweise aus einer Datei per StreamReader und schickt es an die eine oder andere serielle Schnittstelle.

    Das schicken müßte man doch mittels while-Schleife vorläufig unterbrechen können, bis der Toggle-Button wieder gedrückt wird, hätte ich gedacht.

    Gruß Tilmann

    Stoppen geht, weitermachen nicht

    Hallo,

    die Sache scheint ja garnicht so einfach zu sein. Stoppen geht, habe ich herausgefunden:

    In der Do-Loop-Schleife:

    If toggle = True Then
    Exit Do 'Je nach Stellung der Pausen-Taste
    End If

    Damit beendet er die Do-Loop-Schleife - jedenfalls beim zweiten klicken auf die Toggle-Taste.
    Ich hatte gehofft, mit einer GoTo-Anweisung im Toggle-Button könnte ich wieder zurück in die Schleife springen, das geht aber scheinbar nicht, weil es ein anderer Thread ist, stimmt das ?

    Gruß Tilmann
    Ich halte es für suboptimal, einen StreamReader beim Auslesen anzuhalten.
    Besser ist es da doch allemal, die Datei, wenn sie nicht zu groß ist, in einem Stück zu lesen und dann das Weiterreichen in einem separaten Thread zu organisieren.
    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!

    Do-Loop-Schleife mit Toggle-Button vorläufig unterbrechen

    Hallo,

    nach den Empfehlungen, das Problem mit Multithreading zu lösen, habe ich es mit Hilfe dieses geilen Video-Tutorials tatsächlich geschafft, das Programm auf Multithreading umzustricken.

    Damit kann ich jetzt auch per Toggle-Button stoppen; jedoch läuft es bei erneutem Klick auf die Toggle-Taste nicht weiter, vermutlich deswegen, weil sich die Variable nicht aktualisiert.

    Do While sr.Peek() >= 0 And toggle = False 'solange die Datei nicht am Ende ist, und "toggle" diesen Wert hat ...

    Gibt es eine Möglichkeit, den Wert für die Variable "toggle" zu aktualisieren ?

    Gruß Tilmann

    geschafft !

    Hallo,

    habe es geschafft, wenn auch mit häßlichem goto-Befehl, d.h. man kann bliebig anhalten und weiterlaufen lassen:
    _________________________________________________________________
    Do While sr.Peek() >= 0 'Solange die Datei nicht am Ende ist ...
    'Es ist wichtig, daß die Datei nicht mit einer leeren Zeile endet !

    If toggle = True Then
    GoTo Fertig 'Je nach Stellung der Pausen-Taste
    End If

    ' ... ganz viel Code ...

    Fertig:
    Loop 'Ende der Schleife
    __________________________________________
    @Tilmann: Dir ist hoffentlich bewusst, dass der Peek()-Befehl jedesmal ein Byte aus der Datei ausliest, das Du ggf. als solches nicht auswertest.
    Nur am Ende der Datei wird, weil nix mehr da ist, kein Zeichen ausgelesen, dies wird aber mit dem Returnvalue gekennzeichnet.
    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!