Поделиться через


Таймеры

Обновлен: Ноябрь 2007

Таймерами являются простые объекты, позволяющие указывать время вызова делегата. Поток из пула потоков выполняет операцию ожидания.

Использование класса Timer является прямолинейным. Пользователь создает класс Timer путем передачи делегата TimerCallback методу обратного вызова; объект, представляющий состояние, передаваемое в обратный вызов; начальное время вызова; время между обратными вызовами. Для отмены счетчика нужно вызвать функцию Timer.Dispose.

zdzx8wx8.alert_note(ru-ru,VS.90).gifПримечание.

Существует два других класса таймера. Класс System.Windows.Forms.Timer является элементом управления, который работает с визуальными конструкторами, и предназначен для использования в контекстах пользовательского интерфейса; он создает события в потоке пользовательского интерфейса. Класс System.Timers.Timer является производным из Component, поэтому он может использоваться вместе с визуальными конструкторами; он также создает события, однако делает это в потоке ThreadPool. Класс System.Threading.Timer выполняет обратные вызовы потока ThreadPool и совершенно не использует модель событий. Он также предоставляет объект состояния методу обратного вызова, тогда как другие таймеры этого не делают. Он является очень облегченным.

В следующем примере кода запускается таймер, который начинает работу после одной секунды (1000 миллисекунд) и отсчитывает каждую секунду до нажатия клавиши ВВОД. Переменная, содержащая ссылку на таймер, является полем уровня класса, чтобы гарантировать то, что таймер не подлежит сборке мусора во время своей работы. Дополнительные сведения об агрессивной сборке мусора см. в разделе KeepAlive.

Imports System
Imports System.Threading

Public Class Example
   
   Private Shared ticker As Timer
   
   Public Shared Sub TimerMethod(state As Object)
      Console.Write(".")
   End Sub
   
   Public Shared Sub Main()
      ticker = New Timer(AddressOf TimerMethod, Nothing, 1000, 1000)

      Console.WriteLine("Press the Enter key to end the program.")
      Console.ReadLine()
   End Sub 
End Class
using System;
using System.Threading;

public class Example
{   
   private static Timer ticker;
   
   public static void TimerMethod(Object state)
   {
      Console.Write(".");
   }
   
   public static void Main()
   {
      ticker = new Timer(TimerMethod, null, 1000, 1000);

      Console.WriteLine("Press the Enter key to end the program.");
      Console.ReadLine();
   } 
}

См. также

Ссылки

Timer

Другие ресурсы

Объекты и функциональные возможности работы с потоками