Как создать хорошую «панель прогресса»

Для задач, которые занимают более нескольких секунд, хороший пользовательский интерфейс, на мой взгляд, должен обеспечивать индикатор выполнения наряду с соответствующей информацией о ходе выполнения операции. (Microsoft любезно предоставит Руководство по пользовательскому интерфейсу по этой теме, но я хочу панель состояния, которая немного более продвинута.)

Класс «задачи», который я использую, может регистрировать сообщения, и если сообщения достаточно важны (предупреждение или ошибка), я бы хотел отобразить их на панели прогресса. Также было бы хорошо с графической индикацией, когда произошли предупреждения или ошибки (возможно, значок предупреждения или ошибки). Если таких сообщений много, здесь может подойти текстовое поле, представление списка или, возможно, какой-либо элемент управления отчетом .

Во время выполнения задачи может быть кнопка отмены, и после ее завершения будет также полезна кнопка «Просмотр журнала».

Подводя итог, у меня есть хорошая идея, как реализовать мою панель состояния, но мне бы очень хотелось внести свой вклад в это. Я пропустил что-то важное? Я иду за борт за это? Возможно, есть какие-либо компоненты, подобные этой, уже доступны?

10.12.2008 12:40:02
4 ОТВЕТА
РЕШЕНИЕ

Для ведения журнала у вас, вероятно, должен быть еще более высокий уровень ошибки. Это уровни, которые я обычно реализую (как показано в DEC в 80-х годах).

  1. DEBUG - сообщение с очень низкой приоритетностью, которое разработчик просто вставил, чтобы помочь диагностировать, что происходит в случае, если что-то пойдет не так.
  2. ИНФОРМАЦИОННО - Нет проблем, просто сообщая о прогрессе, который может заинтересовать пользователя.
  3. ПРЕДУПРЕЖДЕНИЕ. Что-то, что может быть проблемой в некоторых ситуациях, но также может быть вполне приемлемым.
  4. ОШИБКА - определенная проблема. Пользователь должен быть проинформирован, но программа постарается продолжать.
  5. FATAL - проблема настолько плохая, что программа не может продолжаться

Во-вторых, поскольку вы называете это «панелью прогресса», я предполагаю, что вы планируете реализовать какой-то индикатор прогресса. На самом деле было довольно много исследований в области индикаторов прогресса . Главное, что бы вы ни делали, не позволяйте планке замедляться по мере ее продвижения. Это заставляет его тянуться навсегда.

Наконец, похоже, что вы рассматриваете какую-то строку сообщения о статусе. Если вы ищете хорошие сообщения о состоянии, я предлагаю вам использовать некоторые из них . :-)

2
10.12.2008 14:56:54

Здесь у вас есть аналогичные спецификации панели состояния, которые могут дать вам некоторые идеи относительно того, что может быть включено в этот вид GUI:

В сортировке определите свои цели и область действия этой панели состояния, прежде чем перечислять детали дизайна.

Примечание: с слишком большим количеством опций вы превратите его в «Панель управления» ;-)

1
10.12.2008 13:55:00
Эта спецификация предназначена для работающей службы, а не для одной задачи, поэтому не совсем то, что я ищу. Я понимаю, что термин «панель состояния» немного двусмыслен, поэтому я перефразирую свой вопрос, чтобы вместо него использовать термин «панель состояния прогресса».
Ola Eldøy 10.12.2008 13:15:26
Справедливо. Я имел в виду больше процесс определения вашей панели (статус / контроль / прогресс), чем фактическое содержание спецификации.
VonC 10.12.2008 13:20:21

Вы хотите просматривать сообщения журнала во время выполнения, а не только в конце. Если возникает ошибка, это часто случается до того, как задача будет выполнена, и пользовательский интерфейс думает, что все продолжается. Это может быть действительно раздражающим, когда обнаруживается, что это происходит, и все же единственное видимое сообщение журнала (не обращаясь к какому-либо внешнему файлу) - это какое-то случайное информационное сообщение, далекое от реальной проблемы.

(Я не знаю, делаете ли вы это уже, поскольку это не ясно из вашего вопроса. Если да, снимите шляпу.)

1
10.12.2008 18:40:17
Это именно то, что я пытаюсь сделать. Сообщение журнала должно отображаться на панели прогресса, если оно достаточно «серьезное» (например, ошибка или предупреждение).
Ola Eldøy 10.12.2008 22:48:14

Я думаю, что важно, чтобы ваш основной индикатор прогресса заполнялся ровно один раз, и всегда есть индикация прогресса.

Я только недавно сделал что-то очень похожее на работе. Задачи были долгими, со многими подзадачами. Интерфейс, с которым я закончил, был двойным индикатором выполнения, который был фактически первым и последним из стека индикаторов выполнения.

API это что-то вроде

StartNewTask(Caption,NumberOfSubtasks)
EndTask 
SetProgress(Caption,NumberOfSubtasksFinished)

StartNewTaskтолкает новый бар в стек и EndTaskвыскакивает один.

SetProgress устанавливает ход выполнения последнего толкаемого индикатора и отображает изменения в родительских столбцах. Например:

StartNewTask('Doing 2 things',2)
 SetProgress('Done 1 now',1)
 StartNewTask('Big Subtask',40)
  ...
  SetProgress('Done some subtasks',10)

Теперь показаны 2 индикатора выполнения, второй с 25% (10/40) и первый с 62,5% (1/2 + 10/40 * 2)

Как я уже говорил выше, если у вас в стеке> 2 задач, я показываю только первую и последнюю (первая показывает общий прогресс и никогда не идет назад, вторая - текущую активность)

Вы можете расширить это, задав вес каждой подзадаче, т.е.

StartNewTask(Caption,[ListOfSubTaskWeightings])

Чтобы сделать верхний индикатор прогресса более плавным.

Кроме того, разработчики могут показать все индикаторы выполнения, чтобы понять, почему на это уходит много времени, и я думаю, что вы могли бы сделать из этого приличные логи.

1
10.12.2008 18:53:17