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


таймеры

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

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

ПримечаниеПримечание

Существует два других класса таймера.Класс 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();
    }
}
using namespace System;
using namespace System::Threading;

public ref class Example
{
private:
    static Timer^ ticker;

public:
    static void TimerMethod(Object^ state)
    {
        Console::Write(".");
    }

    static void Main()
    {
        TimerCallback^ tcb =
           gcnew TimerCallback(&TimerMethod);

        ticker = gcnew Timer(tcb, nullptr, 1000, 1000);

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

int main()
{
    Example::Main();
}

См. также

Ссылки

Timer

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

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