Для задач, которые занимают более нескольких секунд, хороший пользовательский интерфейс, на мой взгляд, должен обеспечивать индикатор выполнения наряду с соответствующей информацией о ходе выполнения операции. (Microsoft любезно предоставит Руководство по пользовательскому интерфейсу по этой теме, но я хочу панель состояния, которая немного более продвинута.)
Класс «задачи», который я использую, может регистрировать сообщения, и если сообщения достаточно важны (предупреждение или ошибка), я бы хотел отобразить их на панели прогресса. Также было бы хорошо с графической индикацией, когда произошли предупреждения или ошибки (возможно, значок предупреждения или ошибки). Если таких сообщений много, здесь может подойти текстовое поле, представление списка или, возможно, какой-либо элемент управления отчетом .
Во время выполнения задачи может быть кнопка отмены, и после ее завершения будет также полезна кнопка «Просмотр журнала».
Подводя итог, у меня есть хорошая идея, как реализовать мою панель состояния, но мне бы очень хотелось внести свой вклад в это. Я пропустил что-то важное? Я иду за борт за это? Возможно, есть какие-либо компоненты, подобные этой, уже доступны?
Для ведения журнала у вас, вероятно, должен быть еще более высокий уровень ошибки. Это уровни, которые я обычно реализую (как показано в DEC в 80-х годах).
- DEBUG - сообщение с очень низкой приоритетностью, которое разработчик просто вставил, чтобы помочь диагностировать, что происходит в случае, если что-то пойдет не так.
- ИНФОРМАЦИОННО - Нет проблем, просто сообщая о прогрессе, который может заинтересовать пользователя.
- ПРЕДУПРЕЖДЕНИЕ. Что-то, что может быть проблемой в некоторых ситуациях, но также может быть вполне приемлемым.
- ОШИБКА - определенная проблема. Пользователь должен быть проинформирован, но программа постарается продолжать.
- FATAL - проблема настолько плохая, что программа не может продолжаться
Во-вторых, поскольку вы называете это «панелью прогресса», я предполагаю, что вы планируете реализовать какой-то индикатор прогресса. На самом деле было довольно много исследований в области индикаторов прогресса . Главное, что бы вы ни делали, не позволяйте планке замедляться по мере ее продвижения. Это заставляет его тянуться навсегда.
Наконец, похоже, что вы рассматриваете какую-то строку сообщения о статусе. Если вы ищете хорошие сообщения о состоянии, я предлагаю вам использовать некоторые из них . :-)
Здесь у вас есть аналогичные спецификации панели состояния, которые могут дать вам некоторые идеи относительно того, что может быть включено в этот вид GUI:
В сортировке определите свои цели и область действия этой панели состояния, прежде чем перечислять детали дизайна.
Примечание: с слишком большим количеством опций вы превратите его в «Панель управления» ;-)
Вы хотите просматривать сообщения журнала во время выполнения, а не только в конце. Если возникает ошибка, это часто случается до того, как задача будет выполнена, и пользовательский интерфейс думает, что все продолжается. Это может быть действительно раздражающим, когда обнаруживается, что это происходит, и все же единственное видимое сообщение журнала (не обращаясь к какому-либо внешнему файлу) - это какое-то случайное информационное сообщение, далекое от реальной проблемы.
(Я не знаю, делаете ли вы это уже, поскольку это не ясно из вашего вопроса. Если да, снимите шляпу.)
Я думаю, что важно, чтобы ваш основной индикатор прогресса заполнялся ровно один раз, и всегда есть индикация прогресса.
Я только недавно сделал что-то очень похожее на работе. Задачи были долгими, со многими подзадачами. Интерфейс, с которым я закончил, был двойным индикатором выполнения, который был фактически первым и последним из стека индикаторов выполнения.
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])
Чтобы сделать верхний индикатор прогресса более плавным.
Кроме того, разработчики могут показать все индикаторы выполнения, чтобы понять, почему на это уходит много времени, и я думаю, что вы могли бы сделать из этого приличные логи.