Формирование задержки с помощью таймера
Графические конструкции иногда требуется рассматривать дина- мически в процессе их построения. Поэтому зачастую используется та- кая схема вывода графики:
1. Вывод графического элемента;
2. Задержка на n миллисекунд;
3. Повторение 1 и 2 этапа до вывода всех графических элемен-
тов.
Реализация задержки с помощью таймера возможна следующим
способом:
// Глобальное поле flag
private bool flag = false;
...
// Далее следует часть программы,
// где необходимо организовать задержку
// Включаем таймер timer1.Enabled = true;
// Устанавливаем flag в значение true flag = true;
// Организуем бесконечный цикл while (flag);
// Выключаем таймер после выхода из цикла timer1.Enabled = false;
// Обработчик тика таймера
private void timer1_Tick_1(object sender, EventArgs e)
{
// Сбрасываем flag в значение false flag = false;
}
Идея данного подхода заключается в организации бесконечного цикла, который будет проверять значение некого флага. Однако значе- ние флага может измениться при наступлении события Tick таймера, то есть через заданный в таймере промежуток времени. Однако бесконеч- ный цикл, описанный выше, останется бесконечным и программа про- сто зависнет. В чем же дело? Дело в том, что при такой организации цикла программа не может опросить очередь сообщений, в которое и будет поступать, в том числе, и событие Tick от таймера. Тем самым мы не попадем никогда в обработчик события timer1_Tick_1. Что бы ре- шить данную проблему надо в теле цикла написать Application.DoEvents(), что фактически будет заставлять приложение опрашивать очередь сообщений и в свою очередь приведет к срабаты- ванию обработчика события timer1_Tick_1.
Перед выполнением индивидуального задания по лабораторной ра- боте, разработайте приложение строящее ряд увеличивающихся квадра- тов (рис. 14.2). Квадраты выводятся последовательно через одну секун- ду.
Материалы на данной страницы взяты из открытых источников либо размещены пользователем в соответствии с договором-офертой сайта. Вы можете сообщить о нарушении.