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

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

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

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

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


person Ola Eldøy    schedule 10.12.2008    source источник


Ответы (4)


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

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

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

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

person T.E.D.    schedule 10.12.2008

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

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

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

person VonC    schedule 10.12.2008
comment
Эта спецификация предназначена для работающей службы, а не для отдельной задачи, так что это не совсем то, что я ищу. Я понимаю, что термин «панель состояния» несколько неоднозначен, поэтому я перефразирую свой вопрос, чтобы вместо этого использовать термин «панель состояния выполнения». - person Ola Eldøy; 10.12.2008
comment
Справедливо. Я больше имел в виду процесс определения вашей панели (статус / контроль / прогресс), чем фактическое содержание спецификации. - person VonC; 10.12.2008

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

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

person Paul Brinkley    schedule 10.12.2008
comment
Это именно то, что я пытаюсь сделать. Сообщение журнала должно отображаться на панели прогресса, если оно достаточно серьезное (например, ошибка или предупреждение). - person Ola Eldøy; 11.12.2008

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

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

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])

Чтобы верхняя полоса прогресса была более плавной.

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

person Greg    schedule 10.12.2008