Как создать хорошую «панель прогресса» - PullRequest
2 голосов
/ 10 декабря 2008

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

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

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

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

Ответы [ 4 ]

2 голосов
/ 10 декабря 2008

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

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

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

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

1 голос
/ 10 декабря 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])

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

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

1 голос
/ 10 декабря 2008

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

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

1 голос
/ 10 декабря 2008

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...