Endlosschleife beenden durch einmaligen Button-Klick funktioniert nicht

  • VB.NET

Es gibt 3 Antworten in diesem Thema. Der letzte Beitrag () ist von Mike4711.

    Endlosschleife beenden durch einmaligen Button-Klick funktioniert nicht

    Hallo zusammen,

    ich möchte eine Endlosschleife durch einmaligen Klick auf einen Button beenden können.

    Habe dazu im Forum schon gesucht und auch Hinweise gefunden, dass "Application.DoEvents()" integriert werden muss, damit Ereignisse auch abgefragt werden, wenn das Programm mit der Schleife ausgelastet ist.

    Das mit dem Abbrechen funktioniert zwar grundsätzlich, aber ich muss immer 2 mal auf den Abbruch-Button klicken, damit die Schleife auch verlassen wird.

    Dieses Problem wurde zwar hier im Forum auch schon besprochen, aber soweit ich gesehen habe, immer mit alternativen Lösungen (z. B. Timer).

    Ich suche aber eine Lösung, um tatsächlich mit einmaligem Button-Click aus einer Endlos-Do-While-Schleife auszusteigen.

    Nachfolgend ein Beispiel-Code und zuvor noch folgende Anmerkung:

    Mir geht es letztendlich auch darum, das Ganze zu verstehen. Wenn ich im Abbruch-Event einen Haltepunkt setze, stelle ich fest, dass dieses nach einmaligem Klick auf den Button nicht erreicht wird. Erst nach zweimaligem Klick verzweigt das Programm in das Abbruch-Button-Event. Warum ist das so, bzw. was muss am Code noch verändert werden?

    Mike

    VB.NET-Quellcode

    1. Public Class Form1
    2. Dim Beenden As Boolean = False
    3. Private Sub cmdStart_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdStart.Click
    4. Dim Zähler As Integer = 0
    5. Do While Not Beenden
    6. Zähler = Zähler + 1
    7. lblAnzeige.Text = Zähler.ToString
    8. Application.DoEvents()
    9. Loop
    10. End Sub
    11. Private Sub cmdStop_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdStop.Click
    12. Beenden = True
    13. MsgBox("Schleife wird beendet...")
    14. End Sub
    15. End Class
    Ich hatte mal das gleiche Problem...

    und zwar wird durch die while der button nicht wieder "freigegeben" (=cmdstart = selected)
    d.h. du musst den anderen button oder die Form selectieren

    VB.NET-Quellcode

    1. Public Class Form1
    2. Dim Beenden As Boolean = False
    3. Private Sub cmdStart_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdStart.Click
    4. Dim Zähler As Integer = 0
    5. cmdStop.Select()
    6. Do While Not Beenden
    7. Zähler += 1
    8. lblAnzeige.Text = Zähler.ToString
    9. Application.DoEvents()
    10. Loop
    11. Msgbox("Beendet")
    12. End Sub
    13. Private Sub cmdStop_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdStop.Click
    14. Beenden = True
    15. MsgBox("Schleife wird beendet...")
    16. End Sub
    17. End Class