Programm stoppen

  • VB.NET

Es gibt 15 Antworten in diesem Thema. Der letzte Beitrag () ist von RoulettePilot.

    @ NaHibi Da Threading für Dich wohl noch nix ist ;)
    Sieh Dir mal dies an. Form mit den Button btnStart und btnPause sowie dem Label Label1:
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Public Class Form1
    2. Private beenden As Boolean = False
    3. Private pause As Boolean = False
    4. Private Sub btnStart_Click(sender As System.Object, e As System.EventArgs) Handles btnStart.Click
    5. beenden = False
    6. pause = False
    7. btnPause.Focus()
    8. TestPause()
    9. End Sub
    10. Private Sub btnPause_Click(sender As System.Object, e As System.EventArgs) Handles btnPause.Click
    11. pause = Not pause
    12. End Sub
    13. Private Sub TestPause()
    14. For i As ULong = 0 To ULong.MaxValue
    15. System.Threading.Thread.Sleep(100)
    16. Application.DoEvents()
    17. Label1.Text = i.ToString
    18. Label2.Text = pause.ToString
    19. Do While pause
    20. Application.DoEvents()
    21. If beenden Then
    22. Exit For
    23. End If
    24. Loop
    25. If beenden Then
    26. Exit For
    27. End If
    28. Next
    29. End Sub
    30. Private Sub Form1_FormClosing(sender As System.Object, e As System.Windows.Forms.FormClosingEventArgs) Handles MyBase.FormClosing
    31. beenden = True
    32. End Sub
    33. End Class


    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!
    @RodFromGermany
    Moin.. jetzt mal ne Dumme Frage von mir

    Wie wichtig ist dieses "beenden=True" im Closing Event?
    Ich selbst hätte dies nicht gemacht, denke aber, das du einen Grund dafür hast. Vielleicht mache ich ja immer was falsch. :)

    Was mich dabei wundert. Ein Programm hat ja oft 1000 Schleifen, und bisher hat es mich ehrlich gesagt nicht interessiert an welcher Stelle er im Programm gerade ist, wenn ich das Fenster schließe.

    RoulettePilot schrieb:

    wenn ich das Fenster schließe.
    Mach das mal im Debugger. ;)
    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!
    sorry. verstehe ich trotzdem nicht..
    ich fange doch jetzt nicht an, ein Programm nach dem Debugger auszurichten? Denn er Eingriff in die Schleife ist ja größer das die schleife selbst :)
    Falls du meinst, das er praktisch beendet ist, aber noch "hängt", dann ist ja immer noch das STOP-Button da.

    *immerverwirrtergugg*

    RoulettePilot schrieb:

    dann ist ja immer noch das STOP-Button da.
    Als Benutzer von Windows hast Du allerdings das Recht, das Programm zu beenden, ohne auf den Stopp-Butten gedrückt zu haben. :D
    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!
    ????
    Verstehen wir uns richtig...
    wie reden nur vom "debuggen" ?
    also soll das Programm nur für diesen Fall in allen Schleifen deine Beende-Abfrage rein (man weiss ja nie wo er gerade ist), nur das man während dem Debuggen(!) es "hübsch" hat?

    :) nee. da drücke ich lieber auf das Stopp-Teil, anstatt unnötigen Code einzubauen.
    ( die den APPs in Win8 muss man das ja wohl eh wies aussieht)

    Aber Danke für die Info :) bin nun wieder etwas schlauer :)


    Edit:
    Was mir in diesem Zusammenhang noch einfällt.
    Meist geht es ja nach der Schleife weiter. Und dort greife ich z.T. auf das Ergebnis der Schleife zurück.
    Wenn die nun unmotiviert einfach verlassen wird ohne Ihr Werk richtig getan zu haben, und nachfolgender Code sich darauf verlässt.. kommt man ja in Teufels Küche.

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

    NaHibi schrieb:

    ich würde gerne das eine For-Schleife an einer gewissen Stelle anhält und erst nach z.B. Tastendruck, Buttonclick weiterläuft.

    Finde im Netzt nur die Möglichkeit es für eine gewisse Zeit anzuhalten.


    Wozu soll das gut sein?

    Ich frage, weil meist solche Ideen auf ein mangelhaftes Anwendungs-Konzept hindeuten.
    .. z.b. wenn eine Liste relativ schnell gefüllt wird, das man mal anhalten kann um zu lesen... und dann wieder weitermacht...
    (da fallen mir noch 1000 Sachen ein)


    normalerweise hätte ich diese Frage von Trade erwartet *ggg*
    Das war ein Beispiel..

    anderes.. Netztrafic live anzeigen.. -stop-.. kurz nachschauen.. -weiter- und und und wie gesagt :) Nur ein Beispiel

    und gerade bei Listen ist es blöde.. wenn die gefüllt wird... und du willst das Ende sehen..
    und immer wieder (bei neuen Einträgen) scrollt der nach oben :) dann kämpfst du mit der Maus gegen die Technik.. he he

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

    Einen habe ich noch.. (aus eigener Praxis)
    Ein Programm was etwas berechnet und die gesamte Rechenpower und ewig braucht,
    Ich aber zwischendurch mal was wichtiges anderes machen will...
    Dann halte ich das Teil an (Pause) ... mache mein Ding mit voller CPU-Leistung... und dann lasse ich das andere Programm weitermachen.

    Schau dir Winrar an.. da kannste auch Pause machen während dem Packen.
    Solch Zeugs sollte dann aber auch in separate Threads ausgelagert werden, und das Threadhandling mit Sleep() und Abbruch ist ja wohl definiert.
    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!
    Ntürlich ist das in Threads ausgelagert, sollen ja alle Kerne was zu tun bekommen. Wie gesagt.. Volle Power -
    Aber bei sleep habe ich keine Einfluss an welcher Stelle er unterbricht.
    Bei einer "Pausen"-Taste schon. Da kann ich an definierter Stelle anhalten (und dort vorsichtshalbe ein paar Werte sichern), FAAAALLSSSS mal was schief geht und der Rechner abrotzt, kann ich nach Neustart an definierter Stelle weitermachen.