Ich habe eine WinForms-Anwendung, die auf einem Arbeiter-Thread Daten von einem Web-Dienst abruft, und ich brauche die Eingabe in meine Anwendung zu deaktivieren, bis die Daten geladen wird.Wie blockiere ich alle Tastatur- und Mauseingaben in meine WinForms App?
Derzeit erstelle ich eine halbtransparente Form und legen Sie es über meine Anwendung. Wenn der Datenaufruf abgeschlossen ist, schließe ich dieses Overlay-Formular. Dies funktioniert gut, akzeptieren Sie, dass es erhebliche Leistungsprobleme für Benutzer verursacht, die die Anwendung über Terminaldienste ausführen. Ich habe versucht, das Overlay vollständig transparent zu machen, aber das löst immer noch zwei Neuzeichnungen des gesamten Fensters aus, so dass dies überhaupt nicht geholfen hat.
Ich weiß, dass eine allgemeine Empfehlung für die Handhabung ist, alle Steuerelemente zu deaktivieren, aber das würde auch einen großen Teil des Bildschirms neu zeichnen, also suche ich nach einer anderen Möglichkeit, alle Benutzereingaben zu blockieren. Jede Hilfe wäre sehr willkommen!
UPDATE: Ich habe zu erwähnen, dass wir den modalen Dialog betrachtet haben. Momentan zeigen wir das Overlay, starten den Datenzugriffsthread und konstruieren das Formular. Wenn es keinen besseren Weg eingegeben zu blockieren (App.BlockInput() könnte schön sein), dann könnten wir die modalen Dialog Idee verwenden, aber wir müssten warten, bis die Form der Bau abgeschlossen war, und es ist nicht ein schönes, zentral Standort, um dies zu tun.
Aargh, schlagen Sie mich, um es von wenigen Sekunden ... Ich bin damit einverstanden, das ist wahrscheinlich der beste Weg, dies zu lösen. Außerdem hat ein modaler Dialog den Vorteil, dass es den Benutzer nicht so sehr verwirren kann, wie es ein geschlossenes Formular tun würde. –
Sorry, ich habe vergessen zu erwähnen, dass wir das berücksichtigt haben. Sie können mein Update für die Frage für weitere Informationen sehen. Dies ist die beste Option, passt aber nicht so gut in unsere bestehende Codebasis. –
Daniel, oops. Gute alte Zeiten von WinForms. Silverlight alle asynchronen Modelle sind so schwer zu bewältigen. Jim, vielleicht könnten Sie uns einen Code zeigen. Ist das Erstellen eines Formulars so teuer, dass Sie es berücksichtigen? Es scheint ein "Bettgeruch" im Code zu sein. –