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

Пример использования фоновой обработки одновременно с обновлением данных высокоприоритетного потока пользовательского интерфейса

Пример использования фоновой обработки одновременно с обновлением данных высокоприоритетного потока пользовательского интерфейса

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

Данное приложение несложно адаптировать для выполнения на Pocket PC. Наш выбор Microsoft Smartphone в качестве целевой платформы был сделан исключительно в интересах разнообразия.


Рис. 9.2. Окно интегрированной среды разработки Visual Studio, предcтавляющее проектируемый пользовательский интерфейс приложения типа Smartphone


Рис. 9.3. Экранные снимки эмулятора Smartphone, полученные в процессе вычисления приложением простых чисел

НА ЗАМЕТКУ

Если вы используете Visual Studio .NET 2003, то вам необходимо загрузить SDK для Windows Mobile 2003-based Smartphones. Visual Studio NET 2003 поставлялась с "коробочным" вариантом средств разработки приложений для Pocket PC, но не для Smartphone. Поскольку SDK для Smartphone поставлялся после выхода Visual Studio .NET 2003, его следует загрузить и установить поверх Visual Studio .NET. Пакет SDK можно бесплатно загрузить с Web- сайта компании Microsoft (см. приложение А). Этот SDK включает в себя компоненты, необходимые для проектирования пользовательских интерфейсов Smartphone, а также эмулятор Smartphone, позволяющий выполнять приложения, даже если вы не располагаете физическим устройством Smartphone.

Чтобы создать и запустить указанное приложение, выполните следующие действия:

1. Запустите Visual Studio .NET (2003 или более позднюю версию) и создайте проект C# Smart Device Application.

2. Выберите в качестве целевой платформы Smartphone. (Для вас будет автоматически создан проект, и на экране появится конструктор форм для Smartphone.)

3. Используя рис. 9.2 в качестве образца для компоновки формы, добавьте в нее следующие элементы управления:

 • TextBox (textBox1); задайте в качестве значения свойства Text длинную текстовую строку (например, 12345678901234).

 • Label (label1); измените размеры элемента управления Label таким образом, чтобы он занимал большую часть области формы. В нем придется отображать текст, состоящий из нескольких строк.

 • Timer (timer1).

4. Выделите компонент MainMenu в нижней части окна конструктора форм и добавьте следующие пункты меню:

 • Перейдите к крайнему слева меню (содержащему текст "Type Here" ("Набирайте здесь")) и введите Exit в качестве текста меню. Используя окно Properties, измените имя элемента меню с menuItem1 на menuItemExit. 

 • Справа от меню Exit, которое вы только что добавили (там, где находится текст "Type Here"), введите Prime Search в качестве текста меню. Примечание: при необходимости обратитесь к рис. 9.2.

 • Над меню Prime Search, которое вы только что добавили (там, где находится текст "Type Here"), введите Start в качестве текста меню. Используя окно Properties, измените имя элемента меню с menuItem2 на menuItemStart. Примечание: при необходимости обратитесь к рис. 9.2.

 • Ниже меню Start, которое вы только что добавили (там, где находится текст "Type Here"), введите Abort в качестве текста меню. Используя окно Properties, измените имя элемента меню с menuItem2 на menuItemStart. Примечание: при необходимости обратитесь к рис. 9.2. 

5. Добавьте в проект новый класс. Назовите его FindNextPrimeNumber.сs. Замените содержимое кода класса в окне редактора кодом из листинга 9.5. 

6. Перейдите обратно в окно Form1.cs [Design] и дважды щелкните на элементе меню Exit. В результате этого будет автоматически сгенерирована функция void menuItemExit_Click(), а фокус переместится в окно редактора кода. Введите для этой функции код из листинга 9.4. 

7. Перейдите обратно в окно Form1.cs [Design] и дважды щелкните на элементе меню Start. В результате этого будет автоматически сгенерирована функция private void menuItemStart_Click(), а фокус переместится в окно редактора кода. Введите для этой функции код из листинга 9.4. 

8. Перейдите обратно в окно Form1.cs [Design] и дважды щелкните на названии меню Abort. В результате этого будет автоматически сгенерирована функция private void menuItemAbort_Click(), а фокус переместится в окно редактора кода. Введите для этой функции код из листинга 9.4. 

9. Перейдите обратно в окно Form1.CS [Design] и дважды щелкните на элементе управления timer1 в нижней части окна конструктора. В результате этого будет автоматически сгенерирована функция private void timer1_Tick(). Введите для этой функции код из листинга 9.4. 

10. Введите в класс Form1.cs остальную часть кода из листинга 9.4. 

11. Нажмите клавишу <F5> для компиляции кода и развертывания приложения в эмуляторе Smartphone.

Запустив приложение, нажмите сначала кнопку телефона для вызова меню Prime Search, а затем — клавишу <1> для выбора пункта меню Start В результате этого начнется поиск простых чисел. В процессе выполнения поиска элемент управления timer1 будет несколько раз в секунду вырабатывать событие таймера, заставляющее пользовательский интерфейс обновлять отображаемый на форме текст с информацией о текущем состоянии. В результате динамического обновления этого текста, происходящего несколько раз в секунду, пользователь получает регулярное подтверждение того, что его запрос обрабатывается. Процесс поиска продолжается до тех пор, пока не будет найдено простое число или пока пользователь не выберет пункт Abort меню Prime Search и не нажмет кнопку <2>. Чтобы увеличить продолжительность поиска, перед тем, как его начать, введите в текстовом поле формы произвольное большое число. На моем эмуляторе поиск для начального числа 12345678901234 длился более 20 секунд. В том виде, как он есть, приведенный ниже код не препятствует запуску нового поиска в то время, когда предыдущий еще не закончился. Будет неплохо, если вы усовершенствуете приложение, введя в него проверку этого условия и прекращая выполнение текущего поиска, если к моменту запуска нового он еще не был закончен. Рекомендуется также, чтобы вы заглянули в код, представленный в листинге 9.5. и посмотрели, как ключевое слово lock используется для того, чтобы исключить параллельное вхождение различных потоков в критический раздел, не являющийся безопасным в отношении многопоточного выполнения.

Оглавление книги


Генерация: 0.049. Запросов К БД/Cache: 0 / 0
поделиться
Вверх Вниз