it-swarm.com.de

Deaktivierte Schaltflächen bei länger laufender Aufgabe

Meine Anwendung hat eine Symbolleiste und viele Schaltflächen. Einige Schaltflächen starten lange laufende Prozesse (Aufgaben). In diesem Moment wird jede Aufgabe asynchron ausgeführt, damit der Benutzer während der Ausführung der Aufgabe etwas anderes tun kann. Dabei habe ich ein Problem: Benutzer kann mehrmals auf dieselbe Schaltfläche klicken, um andere dieselben Aufgaben zu starten. Ich habe beschlossen, die Schaltfläche vor dem Start der Aufgabe zu deaktivieren und nach Abschluss zu aktivieren. Anderes Problem, ich sollte andere Tasten vor dem Drücken schützen (einige davon würden deaktiviert, nachdem aktuelle Aufgaben erledigt wurden). Im Allgemeinen muss ich alle Schaltflächen (Symbolleiste) deaktivieren, um sicherzustellen, dass der Benutzer mit vorübergehenden Schaltflächen nichts Gefährliches tun kann. Meine Fragen sind:

Könnte jemand empfehlen, Benutzer vom Flackern abzulenken (Schaltflächen deaktivieren/aktivieren) oder wie sie in den Prozess einbezogen werden, wie sie diese Aufgabe nicht so lange erledigen können?

Vielleicht sollte ich Aufgaben synchron ausführen und die gesamte Benutzeroberfläche für die Ausführungszeit deaktivieren?

Übrigens: Die Verzögerung kann zwischen 1 und 10 Sekunden variieren. Informationen zum Fortschrittsbalken: Es ist schwierig, den aktuellen Fortschritt zu berechnen, und es kommt zu Leistungseinbußen (die Aufgabe kann schneller ausgeführt werden, ohne dass zusätzliche UI-Iterationen von anderen Threads erforderlich sind).

5
igor

Letztendlich ist dies ein Problem, um den Benutzer durch gutes Feedback auf dem Laufenden zu halten.

Das erste, was Sie sofort tun müssen, ist anzuzeigen, dass die Taste gedrückt wurde, und sie nicht glauben zu lassen, dass sie erneut gedrückt werden kann. Dies geschieht häufig durch Deaktivieren der Schaltfläche. Eine Alternative finden Sie weiter unten.

Da Ihre Verzögerung von variabler Länge sein kann, muss die Methode in der Lage sein, den Benutzer darüber zu informieren, wie lange die Aufgabe dauern wird. Wenn die Berechnung des Fortschritts zu schwierig ist, können Sie angeben, dass dies nur wenige Sekunden dauert. Stellen Sie sicher, dass Sie eine positive Terminologie verwenden.

Ich bin wirklich kein Fan davon, Teile der Benutzeroberfläche vorübergehend zu deaktivieren - es besteht immer das Risiko, dass sie nicht wieder aktiviert werden, wenn etwas fehlschlägt. Wenn ich die Benutzeroberfläche blockieren muss, würde ich die Option eines modalen Dialogs bevorzugen, um den Benutzer über die obige Nachricht zu informieren. Außerdem ist das Deaktivieren der Benutzeroberfläche kein direkter Feedback-Mechanismus, sondern ein Programmier-Hack, bei dem sich der Benutzer einfach fragt, was los ist.

Um dem Benutzer Feedback zur aktuellen Aufgabe zu geben, verwenden Sie entweder einen modalen Dialog, um die obige Meldung anzuzeigen und die Anwendung zu blockieren, oder zeigen Sie sie in einem Feedback-/Statusbereich innerhalb der Anwendung an, je nachdem, ob der Benutzer nicht in der Lage sein soll /. in der Lage, mit der Benutzeroberfläche zu interagieren.

Wenn Sie den Benutzern erlauben, auf den Rest der Benutzeroberfläche zuzugreifen, während die Aufgabe aktiv ist, sollten alle Funktionen wie gewohnt funktionieren. Auf der Schaltfläche, mit der die aktive Aufgabe gestartet wurde, können Sie angeben, dass diese bestimmte Funktion aktiv ist. In der Regel erfolgt dies durch Deaktivieren der Schaltfläche. Eine direktere Kommunikationsidee besteht jedoch darin, der Schaltfläche ein Eckensymbol hinzuzufügen, um den aktiven Status aufzuheben. Dies kann eine kleine Sanduhr oder ein anderes belebtes Symbol sein. Wenn der Benutzer auf die Schaltfläche klickt, kann er einfach darüber informiert werden, dass die Aktion bereits aktiv ist. Tooltips können auch den aktiven Status angeben. Diese Idee eines sehr lokalisierten, kontextbezogenen Feedbacks pro Schaltfläche sollte sehr gut funktionieren.

4
Roger Attrill

Idealerweise möchten Sie, dass Ihre Anwendung so schnell wie möglich auf Benutzereingaben reagiert. Es ist also auf jeden Fall sinnvoll, lange laufende Aufgaben asynchron auszuführen.

Wenn der Benutzer dieselbe Aufgabe erneut sendet, haben Sie einige Möglichkeiten:

  1. Schaltfläche vor Aufgabe deaktivieren/nach Aufgabe aktivieren (dies wäre meine Standardauswahl, ohne zu wissen, was genau Ihre Anwendung tut): Anscheinend tun Sie dies bereits. Das Entwickeln der richtigen Logik zum Deaktivieren/Aktivieren von Schaltflächen kann komplex werden, lohnt sich jedoch, wenn Ihre Anwendung für den Endbenutzer intuitiver wird.

  2. Übermittelte Aufgaben zwischenspeichern: Wenn ein Benutzer eine Aufgabe übermittelt, werden die Eingabeparameter zwischengespeichert. Wenn er die Aufgabe ein zweites Mal übermittelt und sich die Eingabeparameter im Cache befinden, starten Sie die Aufgabe nicht ein zweites Mal (da sie bereits ausgeführt wird). Diese Option hängt davon ab, ob die Ausführung der Aufgabe idempotent ist. Sie gilt daher nicht für alle Fälle. Wenn Sie sie jedoch verwenden können , müssen Sie sich keine Gedanken über die Deaktivierung machen/Aktivierungslogik.

  3. Führen Sie die Aufgabe einfach mehrmals aus: Dies wird nicht als Ansatz empfohlen (!) , obwohl dies in einigen Fällen der Fall sein kann Sinn. Wenn Sie beispielsweise nur einen Prototyp erstellen (wie ein Produkt mit minimaler Lebensfähigkeit), möchten Sie die Anwendung so schnell wie möglich auf den Markt bringen. In diesem Fall ist es wichtiger zu lernen, wie die Anwendung verwendet wird, als Rechenressourcen zu verschwenden. Es kann sein, dass diese Aufgaben nicht einmal verwendet werden, sodass Sie Zeit sparen, indem Sie nichts für sie entwickeln.

2
dafmetal

Wenn Sie das Flackern vermeiden möchten, können Sie Joels Rat befolgen: "Menüelemente nicht ausblenden oder deaktivieren" und wenn ein Benutzer eine Symbolleistenschaltfläche für etwas drückt, das bereits ausgeführt wird oder das eine andere Ausführung stören würde Aufgabe können Sie dann entweder eine Meldung anzeigen, warum Sie die Benutzeranforderung nicht abschließen können, oder "Übermittelte Aufgaben zwischenspeichern" (und ein Fenster mit auszuführenden Aufgaben haben) oder einfach die vom Benutzer angeforderten Aufgaben ausführen und erneut ausführen (beachten Sie dies) von Synchronisationsproblemen hier).

2
Marjan Venema

Ein kurzer Vorschlag: Können Sie daraus eine "Checkbox-Schaltfläche" machen, deren Status "Gedrückt"/"Aktiviert" anzeigt, dass die Aufgabe ausgeführt wird. Dann automatisch "drücken"/"deaktivieren", wenn die asynchrone Aufgabe beendet ist?

1
Jeroen

Ich würde die Schaltfläche nicht deaktivieren, sondern intern sicherstellen, dass die Aktion aufgerufen wird, während sie bereits ausgeführt wird. Ich würde jedoch sicherstellen, dass es ein gutes Feedback gibt, wenn die Aktion ausgeführt wird und wenn sie abgeschlossen ist.

0
Eneroth3