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*
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
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*
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();
}
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 😉
... 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.