3. Улучшенная обратная связь. В этом случае на экране отображается не только курсор ожидания, информирующий пользователей о том, что приложение не может реагировать на их запросы, но и текстовое сообщение, объясняющее, чем именно занято приложение в данный момент. Такое поведение интерфейса еще больше устраивает пользователей, поскольку они становятся информированными участниками процесса, и пока идет работа, для них выводится пояснительный текст. Если в процессе выполнения этой работы происходят какие-либо изменения, пользователи будут об этом знать. Постоянно получая информацию о состоянии задачи, пользователи чувствуют себя комфортно. Для создания подобных условий требуется приложить немного больше усилий, чем во втором примере, но если мы в состоянии держать пользователей в курсе дел и предоставить им возможность следить за происходящими в системе изменениями, то достигнутый эффект окупит затраченные на это усилия.
Предполагается, что представленный в листинге 7.3 текст вы поместите в класс Form в проекте для Pocket PC. Для создания и выполнения примера необходимо выполнить следующие действия:
1. В Visual Studio .NET (2003 или более поздней версии) начните новый проект для Pocket PC с использованием языка C#.
2. Разместите в окне конструктора формы для Pocket PC текстовую метку и три кнопки (как показано на рис. 7.1).
3. Дважды щелкните мышью на пустом месте окна конструктора форм; в результате этого будет создан и присоединен к форме обработчик событий Form1_Load, представленный ниже. Включите в эту процедуру приведенный ниже код.
4. Дважды щелкните на кнопке Button1 формы; в результате этого будет создан и присоединен к форме обработчик событий button1_Click, представленный ниже. Включите в эту процедуру приведенный ниже код.
5. Проделайте то же самое для кнопок Button2 и Button3 и включите их коды в соответствующие процедуры.
6. Нажмите клавишу <F5> для запуска приложения на эмуляторе или физическом устройстве Pocket PC. (Если вы хотите запустить приложение без отладчика, нажмите комбинацию клавиш <Ctrl+F5>.)
Рис. 7.1. Пример приложения, иллюстрирующего различные варианты организации обратной связи с пользователем
Листинг 7.3. Демонстрация трех различных уровней организации обратной связи с пользователем
//Поместить надписи на кнопках
private void Form1_Load(object sender, System.EventArgs e) {
button1.Text = "Плохая обратная связь";
button2.Text = "Хорошая обратная связь";
button3.Text = "Улучшенная обратная связь";
}
//----------------------------------------
//Пример слабых интерактивных возможностей интерфейса:
// - Визуальная индикация начала выполнения работы отсутствует
// - Визуальная индикация окончания выполнения работы отсутствует
// - Пользовательский интерфейс не способен к отклику во время работы
// - 0 завершении выполнения задачи пользователь вынужден только догадываться
//----------------------------------------
private void button1_Click(object sender, System.EventArgs e) {
//Имитировать выполнение работы путем создания паузы
//продолжительностью 4 секунды
System.Threading.Thread.Sleep(4000);
}
//----------------------------------------
//Пример лучших интерактивных возможностей интерфейса:
// + Визуальная индикация начала выполнения работы
// (появление курсора ожидания)
// + Визуальная индикация окончания выполнения работы
// (исчезновение курсора ожидания)
// - Пользовательский интерфейс не способен к отклику во время работы
// + По завершении выполнения задачи конечный пользователь узнает об этом,
// а пользовательский интерфейс восстанавливает способность к отклику
//----------------------------------------
private void button2_Click(object sender, System.EventArgs e) {
System.Windows.Forms.Cursor.Current = System.Windows.Forms.Cursors.WaitCursor;
//Имитировать выполнение работы путем создания паузы
//продолжительностью 4 секунды
System.Threading.Thread.Sleep(4000);
System.Windows.Forms.Cursor.Current = System.Windows.Forms.Cursors.Default;
}
//----------------------------------------
//Пример еще лучших интерактивных возможностей интерфейса:
// + Визуальная индикация начала выполнения работы // (появление курсора ожидания)
// + Отображение дополнительного текста, сообщающего пользователю // о том, что происходит
// + Визуальная индикация окончания выполнения работы // (исчезновение курсора ожидания)
// - Пользовательский интерфейс не способен к отклику в процессе работы
// + По завершении выполнения задачи конечный пользователь узнает об этом,
// а пользовательский интерфейс восстанавливает способность к отклику
// + Текстовые сообщения информируют пользователя о том, что происходит
//----------------------------------------
private void button3_Click(object sender, System.EventArgs e) {
//Предоставить пользователю текст, информирующий его обо всем происходящем
label1.Text = "Ждите! Работа выполняется!";
//Заставить интерфейс обновить текст
//(иначе он сделает это только тогда, когда будет перерисовывать сообщение,
//a это может произойти и после выхода из данной функции)
label1.Update();
//Отобразить курсор ожидания
System.Windows.Forms.Cursor.Current = System.Windows.Forms.Cursors.WaitCursor;
//Имитировать выполнение работы путем создания паузы