Основы работы с Таймером в C#

Тема в разделе "C++ / C# / .NET", создана пользователем Евгенька, 18 мар 2015.

  1. Гость, давай поддержим форум вместе, делись информацией с друзями через кнопки в блоке "Поделиться в социальных сетях"

    Скрыть объявление
  1. Евгенька

    Евгенька Banned

    
    Регистр:
    20 фев 2015
    Сообщения:
    153
    Лайки:
    192
    Дизлайки:
    0
    Баллы:
    30
    Пол:
    Мужской
    Давайте, для начала, рассмотрим простой пример программы выводящей текущее время в консоль! :)

    Листинг 1. timer.cs - Отображение времени.
    PHP:
     1:  //  Timer01.cs - Отображение Даты и Времени
    2:  //     
    3:  //      Для завершения программы нажмите Ctrl+C.
    4:  //------------------------------------------
    5:  using System;
    6:   
    7:  class myApp
    8
    :  {
    9:     public static void Main()
    10:     {
    11:        while (true)
    12:        {
    13:           Console.Write("\r{0}"DateTime.Now);
    14:        }
    15:     }
    16:  }
    *** Результат ***

    5/26/2003 9:34:19 PM

    *** Анализ ***

    Этот пример выводит бесконечное число раз текущую дату и время. Прервать выполнение кода можно нажатием Ctrl+C. Текущую дату и время можно получить при помощи метода Now() класса DateTime (объявленный в пространстве имён System), который вызывается в 13 строке.

    Теперь рассмотрим способ отображения времени с помощью таймера. Таймер позволяет через определённый промежуток времени передать управление другой процедуре. Во фреймворке таймер объявлен в пространстве имён System.Timers. Этот класс обычно и называют таймером. Давайте изменим первый пример следующим образом:

    Листинг 2. Timer02.cs - Использование таймера с DateTime.
    PHP:
     1:  //  Timer02.cs - Отображение Даты и Времени
    2:  //      С использованием класса Timer.
    3:  //      Для завершения программы нажмите Ctrl+C.
    4:  //------------------------------------------
    5:  using System;
    6:  using System.Timers;
    7
    8:  class myApp
    9
    :  {
    10:    public static void Main()
    11:    {
    12:      Timer myTimer = new Timer();
    13:      myTimer.Elapsed += new ElapsedEventHandlerDisplayTimeEvent );
    14:      myTimer.Interval 1000;
    15:      myTimer.Start();
    16
    17:      while ( Console.Read() != 'q' )
    18:      {
    19:          ;    // do nothing...
    20:      }
    21:    }
    22:
    23:    public static void DisplayTimeEventobject sourceElapsedEventArgs e )
    24:    {
    25:        Console.Write("\r{0}"DateTime.Now);
    26:    }
    27:  }
    *** Результат ***

    5/26/2003 10:04:13 PM

    *** Анализ ***

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

    Теперь по-порядку: в 12-ой строке содаётся новый экземпляр таймера; в строке 14 задаётся интервал, через который будет срабатывать таймер; в 13ой строке указывается название функции, которой будет передано управление при срабатывании таймера (в данном случае это DisplayTimeEvent, который содержится в строках с 23 по 26). В классе Timer есть свойство AutoReset, которое по умолчанию имеет значение true. Если это значение поменять на false, то таймер будет срабатывать только один раз. Если свойство AutoReset не менять, то таймер будет срабатывать каждый раз по истечению заданного интервала. В строках с 17 по 20 содержится цикл, который повторяется, пока не будет нажата клавиша 'q', а затем Enter.

    Сам исходник (кликабельно): Скачать исходник - 1 кб