Autor Beitrag
Stefanie
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 26



BeitragVerfasst: Di 27.03.07 10:17 
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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Veteran
Beiträge: 5502
Erhaltene Danke: 220

Windows 8 , Server 2012
D7 Pro, VS.NET 2012 (C#)
BeitragVerfasst: 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:
ausblenden 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:
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
cancel = false;
while (!cancel)
{
  Application.DoEvents();
}
Stefanie Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 26



BeitragVerfasst: Di 27.03.07 12:51 
danke!

aber was heisst "Application.doevents()"? kommt da einfach mein code?
UGrohne
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Veteran
Beiträge: 5502
Erhaltene Danke: 220

Windows 8 , Server 2012
D7 Pro, VS.NET 2012 (C#)
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 26



BeitragVerfasst: 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.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: 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

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
JüTho
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2021
Erhaltene Danke: 6

Win XP Prof
C# 2.0 (#D für NET 2.0, dazu Firebird); früher Delphi 5 und Delphi 2005 Pro
BeitragVerfasst: 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