Лабораторный практикум по информатике


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



бет62/83
Дата06.01.2022
өлшемі1,1 Mb.
#15674
түріПрактикум
1   ...   58   59   60   61   62   63   64   65   ...   83

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


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

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


Достарыңызбен бөлісу:
1   ...   58   59   60   61   62   63   64   65   ...   83




©emirsaba.org 2024
әкімшілігінің қараңыз

    Басты бет