Формирование задержки с помощью таймера

  • docx
  • 27.11.2021
Публикация на сайте для учителей

Публикация педагогических разработок

Бесплатное участие. Свидетельство автора сразу.
Мгновенные 10 документов в портфолио.

Иконка файла материала Л2-003006.docx

 Формирование задержки с помощью таймера

Графические конструкции иногда требуется рассматривать дина- мически в процессе их построения. Поэтому зачастую используется та- кая схема вывода графики:

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). Квадраты выводятся последовательно через одну секун- ду.