Also hat mich etwas an der neuen asynchronen Unterstützung in C # 5 gestört:
Der Benutzer drückt eine Taste, die eine asynchrone Operation startet. Der Anruf kehrt sofort zurück und die Nachrichtenpumpe beginnt wieder zu laufen - das ist der springende Punkt.
So kann der Benutzer die Taste erneut drücken, was zu einem erneuten Eintritt führt. Was ist, wenn dies ein Problem ist?
In den Demos, die ich gesehen habe, wird die Schaltfläche vor dem await
Anruf deaktiviert und anschließend wieder aktiviert. Dies scheint mir eine sehr fragile Lösung in einer realen App zu sein.
Sollten wir eine Art Zustandsmaschine codieren, die angibt, welche Steuerelemente für einen bestimmten Satz von laufenden Operationen deaktiviert werden müssen? Oder gibt es einen besseren Weg?
Ich bin versucht, nur einen modalen Dialog für die Dauer der Operation anzuzeigen, aber das fühlt sich ein bisschen an, als würde man einen Vorschlaghammer verwenden.
Hat jemand gute Ideen, bitte?
BEARBEITEN:
Ich denke, das Deaktivieren der Steuerelemente, die nicht verwendet werden sollten, während ein Vorgang ausgeführt wird, ist fragil, da es meiner Meinung nach schnell komplex wird, wenn Sie ein Fenster mit vielen Steuerelementen haben. Ich mag es, die Dinge einfach zu halten, da dies die Wahrscheinlichkeit von Fehlern verringert, sowohl bei der Erstcodierung als auch bei der anschließenden Wartung.
Was ist, wenn es eine Sammlung von Steuerelementen gibt, die für einen bestimmten Vorgang deaktiviert werden sollten? Und was ist, wenn mehrere Vorgänge gleichzeitig ausgeführt werden?