Ich habe eine WinForms-Anwendung, die Daten von einem Webdienst auf einem Worker-Thread abruft, und ich brauche, um alle Eingaben in meine Anwendung zu deaktivieren, bis die Daten geladen sind.
Derzeit erstelle ich ein halbtransparentes Formular und lege es über meine Anwendung. Wenn der Datenaufruf abgeschlossen ist, schließe ich dieses Overlay-Formular. Das funktioniert gut, allerdings verursacht es erhebliche Leistungsprobleme für Benutzer, die die Anwendung über Terminaldienste ausführen. Ich habe versucht, das Overlay vollständig transparent zu machen, aber das löst immer noch zwei Neuaufrufe des gesamten Fensters aus, so dass dies überhaupt nicht geholfen hat.
Ich weiß, dass eine gemeinsame Empfehlung für die Behandlung dieser ist, alle Steuerelemente zu deaktivieren, aber das würde auch neu zeichnen viel des Bildschirms, so dass ich für eine andere Möglichkeit, alle Benutzereingaben zu blockieren suchen. Jede Hilfe wäre sehr willkommen!
UPDATE: Ich hätte erwähnen sollen, dass wir den modalen Dialog in Betracht gezogen haben. Derzeit zeigen wir das Overlay an, starten den Datenzugriffsthread und bauen dann das Formular auf. Wenn es keine bessere Möglichkeit gibt, Eingaben zu blockieren (App.BlockInput() wäre schön), dann könnten wir die Idee des modalen Dialogs verwenden, aber wir müssten warten, bis der Aufbau des Formulars abgeschlossen ist, und es gibt derzeit keine schöne, zentrale Stelle, um dies zu tun.