Laden...

Warten auf Rechtsklick

Erstellt von Red-Sh4nks vor 12 Jahren Letzter Beitrag vor 12 Jahren 973 Views
Thema geschlossen
R
Red-Sh4nks Themenstarter:in
47 Beiträge seit 2011
vor 12 Jahren
Warten auf Rechtsklick

Hallo allerseits!

Ich habe eine Methode "RundeBeenden". Diese soll nun einige ihrer Funktionen ausführen und anschließend auf einen Rechtsklick warten. Sobald der Benutzer dann rechtsklickt, soll die Methode noch die restlichen Funktionen ausführen.

Ich habe es mit einem Bool "Rechtsklick" probiert, das bei einem Rechtsklick true gesetzt wird. Und in der Methode Rundebeenden läuft solange: while(Rechtsklick == false). Allerdings lässt dieses while keine Klicks in der Zwischenzeit zu, daher --> fail

Mit Threads wäre es leicht zu lösen, allerdings möchte ich threads gerne vermeiden. Meine Frage nun: Gibt es eine andere Möglichkeit, dieses Problem zu lösen, außer mit Threads?

Danke für eure Hilfe! 😃

lg Marco*

3.430 Beiträge seit 2007
vor 12 Jahren

Hallo,

Das Problem ist dass du den GUI-Thread total aufhängst wenn du diese While Schleife hast.
Dieser kann dann auch nicht mehr deine UI-Inputs verwalten und es geht gar nichts mehr.
Siehe: [FAQ] Warum blockiert mein GUI?

Und zudem sollte man alles Eventbasiert machen. D.h. den Rechtsklick löst ein Event aus und du reagierst dann auf dieses.
Auf irgendwelche Benutzeraktionen sollte man nie warten

Gruß
Michael

R
Red-Sh4nks Themenstarter:in
47 Beiträge seit 2011
vor 12 Jahren

Und zudem sollte man alles Eventbasiert machen. D.h. den Rechtsklick löst ein Event aus und du reagierst dann auf dieses.
Auf irgendwelche Benutzeraktionen sollte man nie warten

Danke für die sehr schnelle Antwort Michael 😃

Gut... Das es die UI-Inputs blockiert ist schon mal eine genaue Beschreibung von meinem fail. Zu Eventbasiert: Es wäre zwar eine schöne Lösung, aber es MUSS nunmal auf die Zustimmung des Benutzers (in Form eines Rechtsklicks) gewartet werden.

Gibt es noch andere Vorschläge?

lg Marco*

5.742 Beiträge seit 2007
vor 12 Jahren

Gibt es noch andere Vorschläge?

Nein.

"Warte" auf den Rechtsklick, indem du auf das Event "wartest".
Wobei "warten" hierbei passiv anzusehen ist; du musst deinen Code entsprechend umschreiben:


//statt
DoFoo();
Wait();
DoBar();

//also:
DoFoo();
this.RightClick += Handler;
//...
void Handler(/**/)
{
   this.RightClick -= Handler;
   DoBar();
}

R
Red-Sh4nks Themenstarter:in
47 Beiträge seit 2011
vor 12 Jahren

Ahhhhhh! Das ist eine gute Idee! michlG hat anscheinend das gleiche gemeint und ich habe ihn nur nicht richtig verstanden. Danke, Jetzt komm ich alleine weiter 😉

Hinweis von herbivore vor 12 Jahren

... wobei man noch darauf achten muss, den EventHandler nur einmal zu registrieren und nicht jedes Mal hinter DoFoo.

Ansonsten gehört das Wissen um den Aufbau einer Windows Forms Anwendung aus (vielen kleinen) EventHandlern zu den Grundlagen. Siehe [Hinweis] Wie poste ich richtig? Punkt 1.1.

Thema geschlossen