Чтение онлайн

на главную

Жанры

Программирование мобильных устройств на платформе .NET Compact Framework

Салмре Иво

Шрифт:

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

1. В процеcce разработки кода снабжайте его средствами контроля (мониторинга) выполнения приложения. Подсчет количества запусков событий относится к операциям с низкими накладными расходами; для этого требуется всего лишь последовательно увеличивать на единицу значение целой переменной. С точки зрения диагностики вам также может пригодиться ведение и периодическое изучение упорядоченного списка возникающих событий. Включение соответствующих средств в код можно организовать с помощью условной

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

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

3. Время от времени размещайте точки останова в каждом из обработчиков событий приложения и исследуйте цепочки обрабатываемых событий. Для выяснения того, какие виды обработки событий и в каком порядке выполняются, полезно периодически организовывать пошаговое отслеживание выполнения событий, запускаемых в пользовательском интерфейсе. Не исключено, что таким способом вам удастся обнаружить непредусмотренные каскады событий, инициируемых обновлением пользовательского интерфейса кодом приложения; может также оказаться, что выполняется излишняя обработка, требующая больших накладных расходов. Хорошим примером кода, который следует выявлять и исключать из своего приложения, является код обработки событий, инициирующий выполнение многочисленных операций считывания и записи данных с использованием базы данных.

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

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

интерфейса. Для создания данного примера приложения необходимо выполнить следующие действия:

Пример приложения Pocket PC, демонстрирующий работу средств контроля запуска событий

Рис. 11.4. Пример приложения Pocket PC, демонстрирующий работу средств контроля запуска событий

1. Начните новый проект Smart Device в Visual Studio .NET, выбрав в качестве целевой платформы Pocket PC.

2. Добавьте в форму Form элементы управления TextBox, RadioButton, ListBox и Button (на рис. 11.4 показано, как должна выглядеть форма).

3. Дважды щелкните на кнопке Button в окне конструктора форм. В результате этого будет создан и подключен к кнопке приведенный ниже обработчик событий button1_Click. Введите соответствующий код из листинга 11.4, который будет реагировать на это событие.

4. Дважды щелкните на элементе управления TextBox в окне конструктора форм. В результате этого будет создан и подключен к текстовому окну приведенный ниже обработчик событий textBox1_TextChanged. Введите соответствующий код из листинга 11.4, который будет реагировать на это событие.

5. Дважды щелкните на элементе управления RadioButton1 в окне конструктора форм. В результате этого будет создан и подключен к переключателю приведенный ниже обработчик событий radioButton1_Click. Введите соответствующий код из листинга 11.4, который будет реагировать на это событие.

6. Измените имя второй кнопки с button2 на buttonShowEventLog и дважды щелкните на кнопке Button в окне конструктора форм. В результате этого будет создан и подключен к кнопке приведенный ниже обработчик событий buttonShowEventLog_Click. Введите соответствующий код из листинга 11.4, который будет реагировать на это событие

7. Введите оставшуюся часть приведенного ниже кода, включая операторы #if и #endif и переменные уровня класса.

8. В самом начале файла класса формы Form добавьте оператор #define EVENTINSTRUMENTATION. Это позволит вам использовать условную компиляцию кода.

9. Скомпилируйте пример и запустите его на выполнение. Щелкните на кнопке Button1, введите текст в текстовом поле TextBox и щелкните на кнопке ShowEventLog, чтобы увидеть список событий, которые были запущены.

10. Завершив выполнение приложения, удалите символы комментария в строке m_userInterfaceUpdateOccuring = true; кода обработчика событий Button_Click и повторно запустите приложение на выполнение. Обратите внимание, что установка этого флага предотвратила нежелательное выполнение кода приложения при запуске обработчиков событий в результате программного доступа к свойствам элементов управления.

Листинг 11.4. Использование модели состояний для обновления интерфейса и контроль запуска событий с целью более глубокого изучения процесса обработки событий и управления им

//-------------------------------------------------------

//Поместить данную директиву #define в начале определения

//класса, если требуется регистрация событий

//#define EVENTINSTRUMENTATION

//-------------------------------------------------------

Поделиться:
Популярные книги

Ратник

Ланцов Михаил Алексеевич
3. Помещик
Фантастика:
альтернативная история
7.11
рейтинг книги
Ратник

Хозяин Хаоса I

Петров Максим Николаевич
1. Хозяин Хаоса
Фантастика:
аниме
фэнтези
фантастика: прочее
попаданцы
5.00
рейтинг книги
Хозяин Хаоса I

Черный Маг Императора 11

Герда Александр
11. Черный маг императора
Фантастика:
юмористическое фэнтези
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Черный Маг Императора 11

Товарищ "Чума" 10

lanpirot
10. Товарищ "Чума"
Фантастика:
городское фэнтези
попаданцы
альтернативная история
5.00
рейтинг книги
Товарищ Чума 10

Сапер

Вязовский Алексей
1. Сапер
Фантастика:
героическая фантастика
попаданцы
альтернативная история
5.29
рейтинг книги
Сапер

Волкодав

Семёнова Мария Васильевна
1. Волкодав
Фантастика:
фэнтези
героическая фантастика
9.46
рейтинг книги
Волкодав

Газлайтер. Том 6

Володин Григорий
6. История Телепата
Фантастика:
попаданцы
альтернативная история
аниме
5.00
рейтинг книги
Газлайтер. Том 6

На границе империй. Том 9. Часть 2

INDIGO
15. Фортуна дама переменчивая
Фантастика:
космическая фантастика
попаданцы
5.00
рейтинг книги
На границе империй. Том 9. Часть 2

Воплощение Похоти

Некрасов Игорь
1. Воплощение Похоти
Фантастика:
юмористическое фэнтези
попаданцы
рпг
аниме
5.00
рейтинг книги
Воплощение Похоти

Последний реанорец. Том I и Том II

Павлов Вел
1. Высшая Речь
Фантастика:
фэнтези
7.62
рейтинг книги
Последний реанорец. Том I и Том II

Первый среди равных. Книга III

Бор Жорж
3. Первый среди Равных
Фантастика:
попаданцы
аниме
фэнтези
6.00
рейтинг книги
Первый среди равных. Книга III

Черный Маг Императора 23

Герда Александр
23. Черный маг императора
Фантастика:
юмористическое фэнтези
аниме
сказочная фантастика
фэнтези
фантастика: прочее
попаданцы
5.00
рейтинг книги
Черный Маг Императора 23

Мастер Трав III

Мордорский Ваня
3. Мастер Трав
Фантастика:
фэнтези
рпг
фантастика: прочее
попаданцы
5.75
рейтинг книги
Мастер Трав III

Тайна корабля

Стивенсон Роберт Льюис
Проза:
классическая проза
5.00
рейтинг книги
Тайна корабля