Entwickler-Ecke

WinForms - while-Schleife mit button unterbrechen


Stefanie - Di 27.03.07 10:17
Titel: while-Schleife mit button unterbrechen
Hallo!

Ich habe folgendes Problem:
Ich schreibe ein programm, das mit einem button gestartet und mit einem button wieder abgebrochen wird.
wenn das programm gestartet ist, läuft es in einer while-schleife.

wie kann ich mit einem Click auf den Stopp-Button den prozess beenden?
hat jemand eine idee?

Vielen dank!


Moderiert von user profile iconChristian S.: Topic aus C# - Die Sprache verschoben am Di 27.03.2007 um 10:18


UGrohne - Di 27.03.07 12:43

In der Schleife musst Du die Nachrichten bearbeiten lassen und als Abbruchbedingung einen Boolean haben, der anfangs auf False gesetzt ist:

Delphi-Quelltext
1:
2:
3:
4:
5:
 cancel := false;
while not cancel do begin
  //Code
  Application.ProcessMessages;
  end;

Im EventHandler des Buttons setzt Du dann cancel auf true. Das wars eigentlich ;)

//EDIT: Mist, gerade gesehen, dass das hier im C#-Forum steht ;). Aber da gehts ähnlich:

C#-Quelltext
1:
2:
3:
4:
5:
cancel = false;
while (!cancel)
{
  Application.DoEvents();
}


Stefanie - Di 27.03.07 12:51

danke!

aber was heisst "Application.doevents()"? kommt da einfach mein code?


UGrohne - Di 27.03.07 13:19

user profile iconStefanie hat folgendes geschrieben:
danke!

aber was heisst "Application.doevents()"? kommt da einfach mein code?

Nein, der kommt davor oder danach (vgl. Delphi-Code, hab den Kommentar da unten einfach vergessen). DoEvents dorgt für de Abarbeitung der Nachrichtenschleife, also dass beispielsweise ein Button-Click registriert und verarbeitet wird. Du solltest natürlich darauf achten, dass jeder Schleifendurchgang nicht allzuviel Zeit in Anspruch nimmt, weil die Applikation in dieser Zeit "hängt". Sollte das jedoch der Fall sein, solltest Du über die Auslagerung in Threads nachdenken.


Stefanie - Di 27.03.07 16:03

ich habe es gleich mal ausprobiert, aber es läuf nicht so, wie ich es gerne hätte.
denn die schlaufe wird dennoch weiter ausgeführt, wenn mein button-ereignis vorbei ist.

ich habe in dem button-ereignis ein "Close();" eingefügt, um zu testen, ob es funktioniert. die form geht
zu, aber die Schlaufe läuft weiter...wie kann sie ganz abbrechen?


Christian S. - Di 27.03.07 16:07

Es hilft wahrscheinlich mehr, wenn Du mal Deinen Code zeigst. Interessant: Deklariation der Variabel cancel, die Schleife und außerdem den Code des Buttonclick-Ereignisses


JüTho - Mi 28.03.07 10:07

Hallo Stefanie,
user profile iconStefanie hat folgendes geschrieben:
ich habe es gleich mal ausprobiert, aber es läuf nicht so, wie ich es gerne hätte.
denn die schlaufe wird dennoch weiter ausgeführt, wenn mein button-ereignis vorbei ist.

ich habe in dem button-ereignis ein "Close();" eingefügt, um zu testen, ob es funktioniert. die form geht
zu, aber die Schlaufe läuft weiter...wie kann sie ganz abbrechen?

Dein Button-Ereignis muss der Schleife mitteilen, dass sie beendet werden soll. Die cancel-Variable von Christian muss also für das Button-Ereignis "zugänglich" sein und sie entsprechend ändern.

Gruß Jürgen