Fenster für eine bestimmte Zeit sperren ohne Aktionen in Evenqueue einzulesen
-
Ich führe innerhalb meiner Windows-Forms Anweisung eine Operation aus, die etwas länger dauert. Dafür starte ich das was etwas länger dauert in einem backgroundworker-thread und zeige eine Progressbar an. Das Hauptfenster locke ich mit this.enabled = false, und setze es wenn der backgroundworker fertig ist wieder auf true.
Nur leider hat die enabled-Eigenschaft den entscheidenden Nachteil, dass z.B. Mausklicks gespeichert werden und abgearbeitet werden sobald das Hauptfenster enabled ist. D.h. wenn der User nun während die Progressbar am laufen ist wild in dem Hauptfenster rumklickt (welches zu diesem Zeitpunkt nicht zugreifbar ist), dann werden alle Aktionen die durch Mausklicks ausgelöst wurden direkt nach dem Backgroundworker ausgeführt.
Genau das möchte ich aber nicht, ich möchte dass das Hauptfenster komplett gesperrt ist. Gibt es da eine Möglichkeit?
-
Alle Controls einzeln sperren. Geht einfacher, wenn du z.B. GroupBoxes oder Panels sperrst werden alle Child-Fenster auch gesperrt.
-
Du könntest vorher einfach die Messages ausführen (verwerfen) lassen:
Application.DoEvents(); Enabled = true;
-
@Gast393478:
Die Akrobatik ist nicht nötig. Starte die Form mit der ProgressBar doch einfach über die Methode ShowDialog(). Gruss.