Timer Конструкторы

Определение

Инициализирует новый экземпляр класса Timer.Initializes a new instance of the Timer class.

Перегрузки

Timer(TimerCallback)

Инициализирует новый экземпляр класса Timer с бесконечным периодом и бесконечным временем действия, используя созданный объект Timer в качестве объекта состояния.Initializes a new instance of the Timer class with an infinite period and an infinite due time, using the newly created Timer object as the state object.

Timer(TimerCallback, Object, Int32, Int32)

Инициализирует новый экземпляр класса Timer, используя указанное 32-разрядное знаковое целое число для задания временного интервала.Initializes a new instance of the Timer class, using a 32-bit signed integer to specify the time interval.

Timer(TimerCallback, Object, Int64, Int64)

Инициализирует новый экземпляр класса Timer, используя указанное 64-разрядное знаковое целое число для измерения временных интервалов.Initializes a new instance of the Timer class, using 64-bit signed integers to measure time intervals.

Timer(TimerCallback, Object, TimeSpan, TimeSpan)

Инициализирует новый экземпляр класса Timer, используя значения объекта TimeSpan для измерения временных интервалов.Initializes a new instance of the Timer class, using TimeSpan values to measure time intervals.

Timer(TimerCallback, Object, UInt32, UInt32)

Инициализирует новый экземпляр класса Timer, используя указанное 32-разрядное незнаковое целое число для измерения временных интервалов.Initializes a new instance of the Timer class, using 32-bit unsigned integers to measure time intervals.

Timer(TimerCallback)

Инициализирует новый экземпляр класса Timer с бесконечным периодом и бесконечным временем действия, используя созданный объект Timer в качестве объекта состояния.Initializes a new instance of the Timer class with an infinite period and an infinite due time, using the newly created Timer object as the state object.

public:
 Timer(System::Threading::TimerCallback ^ callback);
public Timer (System.Threading.TimerCallback callback);
new System.Threading.Timer : System.Threading.TimerCallback -> System.Threading.Timer
Public Sub New (callback As TimerCallback)

Параметры

callback
TimerCallback

Делегат TimerCallback, представляющий выполняемый метод.A TimerCallback delegate representing a method to be executed.

Примеры

В следующем примере кода создается новый таймер с использованием самого таймера в качестве объекта состояния.The following code example creates a new timer, using the timer itself as the state object. Change Метод используется для запуска таймера.The Change method is used to start the timer. Когда происходит обратный вызов таймера, объект состояния используется для отключения таймера.When the timer callback occurs, the state object is used to turn the timer off.

using System;
using System.Threading;

public class Example
{
    public static void Main()
    {
        // Create an instance of the Example class, and start two
        // timers.
        Example ex = new Example();
        ex.StartTimer(2000);
        ex.StartTimer(1000);

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

    public void StartTimer(int dueTime)
    {
        Timer t = new Timer(new TimerCallback(TimerProc));
        t.Change(dueTime, 0);
    }

    private void TimerProc(object state)
    {
        // The state object is the Timer object.
        Timer t = (Timer) state;
        t.Dispose();
        Console.WriteLine("The timer callback executes.");
    }
}
Imports System.Threading

Public Class Example
    Public Shared Sub Main()
        ' Create an instance of the Example class, and start two
        ' timers.
        Dim ex As New Example()
        ex.StartTimer(2000)
        ex.StartTimer(1000)

        Console.WriteLine("Press Enter to end the program.")
        Console.ReadLine()
    End Sub

    Public Sub StartTimer(ByVal dueTime As Integer)
        Dim t As New Timer(AddressOf TimerProc)
        t.Change(dueTime, 0)
    End Sub

    Private Sub TimerProc(ByVal state As Object)
        ' The state object is the Timer object.
        Dim t As Timer = CType(state, Timer)
        t.Dispose()
        Console.WriteLine("The timer callback executes.")
    End Sub
End Class

Комментарии

Вызывайте этот конструктор, если хотите использовать Timer сам объект в качестве объекта состояния.Call this constructor when you want to use the Timer object itself as the state object. После создания таймера используйте Change метод, чтобы задать интервал и время выполнения.After creating the timer, use the Change method to set the interval and due time.

Этот конструктор задает бесконечное время выполнения перед первым обратным вызовом и неограниченный интервал между обратными вызовами, чтобы предотвратить появление первого обратного вызова до того, как Timer объект будет назначен объекту состояния.This constructor specifies an infinite due time before the first callback and an infinite interval between callbacks, in order to prevent the first callback from occurring before the Timer object is assigned to the state object.

Метод, указанный для callback , должен быть повторным, так как он вызывается в ThreadPool потоках.The method specified for callback should be reentrant, because it is called on ThreadPool threads. Метод может быть выполнен одновременно в двух потоках пула потоков, если интервал таймера меньше времени, необходимого для выполнения метода, или если все потоки пула потоков используются и метод помещается в очередь несколько раз.The method can be executed simultaneously on two thread pool threads if the timer interval is less than the time required to execute the method, or if all thread pool threads are in use and the method is queued multiple times.

Timer(TimerCallback, Object, Int32, Int32)

Инициализирует новый экземпляр класса Timer, используя указанное 32-разрядное знаковое целое число для задания временного интервала.Initializes a new instance of the Timer class, using a 32-bit signed integer to specify the time interval.

public:
 Timer(System::Threading::TimerCallback ^ callback, System::Object ^ state, int dueTime, int period);
public Timer (System.Threading.TimerCallback callback, object state, int dueTime, int period);
new System.Threading.Timer : System.Threading.TimerCallback * obj * int * int -> System.Threading.Timer
Public Sub New (callback As TimerCallback, state As Object, dueTime As Integer, period As Integer)

Параметры

callback
TimerCallback

Делегат TimerCallback, представляющий выполняемый метод.A TimerCallback delegate representing a method to be executed.

state
Object

Объект, содержащий информацию, используемую методом ответного вызова или значение null.An object containing information to be used by the callback method, or null.

dueTime
Int32

Количество времени до начала использования параметра callback, в миллисекундах.The amount of time to delay before callback is invoked, in milliseconds. Следует задать поле Infinite для того, чтобы не допустить запуск таймера.Specify Infinite to prevent the timer from starting. Задайте значение ноль (0) для немедленного запуска таймера.Specify zero (0) to start the timer immediately.

period
Int32

Временной интервал между вызовами параметра callback, в миллисекундах.The time interval between invocations of callback, in milliseconds. Следует задать поле Infinite для отключения периодической сигнализации.Specify Infinite to disable periodic signaling.

Исключения

Значение параметра dueTime или period отрицательно, и не равно Infinite.The dueTime or period parameter is negative and is not equal to Infinite.

Параметр callback имеет значение null.The callback parameter is null.

Примеры

В следующем примере кода показано, как создать TimerCallback делегат и инициализировать новый экземпляр Timer класса.The following code example shows how to create a TimerCallback delegate and initialize a new instance of the Timer class.

using namespace System;
using namespace System::Threading;

ref class StatusChecker
{
private:
    int invokeCount, maxCount;

public:
    StatusChecker(int count)
    {
        invokeCount  = 0;
        maxCount = count;
    }

    // This method is called by the timer delegate.
    void CheckStatus(Object^ stateInfo)
    {
        AutoResetEvent^ autoEvent = dynamic_cast<AutoResetEvent^>(stateInfo);
        Console::WriteLine("{0:h:mm:ss.fff} Checking status {1,2}.",
                           DateTime::Now, ++invokeCount);

        if (invokeCount == maxCount) {
            // Reset the counter and signal the waiting thread.
            invokeCount  = 0;
            autoEvent->Set();
        }
    }
};

ref class TimerExample
{
public:
    static void Main()
    {
        // Create an AutoResetEvent to signal the timeout threshold in the
        // timer callback has been reached.
        AutoResetEvent^ autoEvent = gcnew AutoResetEvent(false);

        StatusChecker^ statusChecker = gcnew StatusChecker(10);

        // Create a delegate that invokes methods for the timer.
        TimerCallback^ tcb =
           gcnew TimerCallback(statusChecker, &StatusChecker::CheckStatus);

        // Create a timer that invokes CheckStatus after one second, 
        // and every 1/4 second thereafter.
        Console::WriteLine("{0:h:mm:ss.fff} Creating timer.\n",
                           DateTime::Now);
        Timer^ stateTimer = gcnew Timer(tcb, autoEvent, 1000, 250);

        // When autoEvent signals, change the period to every half second.
        autoEvent->WaitOne(5000, false);
        stateTimer->Change(0, 500);
        Console::WriteLine("\nChanging period to .5 seconds.\n");

        // When autoEvent signals the second time, dispose of the timer.
        autoEvent->WaitOne(5000, false);
        stateTimer->~Timer();
        Console::WriteLine("\nDestroying timer.");
    }
};

int main()
{
    TimerExample::Main();
}
// The example displays output like the following:
//       11:59:54.202 Creating timer.
//       
//       11:59:55.217 Checking status  1.
//       11:59:55.466 Checking status  2.
//       11:59:55.716 Checking status  3.
//       11:59:55.968 Checking status  4.
//       11:59:56.218 Checking status  5.
//       11:59:56.470 Checking status  6.
//       11:59:56.722 Checking status  7.
//       11:59:56.972 Checking status  8.
//       11:59:57.223 Checking status  9.
//       11:59:57.473 Checking status 10.
//       
//       Changing period to .5 seconds.
//       
//       11:59:57.474 Checking status  1.
//       11:59:57.976 Checking status  2.
//       11:59:58.476 Checking status  3.
//       11:59:58.977 Checking status  4.
//       11:59:59.477 Checking status  5.
//       11:59:59.977 Checking status  6.
//       12:00:00.478 Checking status  7.
//       12:00:00.980 Checking status  8.
//       12:00:01.481 Checking status  9.
//       12:00:01.981 Checking status 10.
//       
//       Destroying timer.
using System;
using System.Threading;

class TimerExample
{
    static void Main()
    {
        // Create an AutoResetEvent to signal the timeout threshold in the
        // timer callback has been reached.
        var autoEvent = new AutoResetEvent(false);
        
        var statusChecker = new StatusChecker(10);

        // Create a timer that invokes CheckStatus after one second, 
        // and every 1/4 second thereafter.
        Console.WriteLine("{0:h:mm:ss.fff} Creating timer.\n", 
                          DateTime.Now);
        var stateTimer = new Timer(statusChecker.CheckStatus, 
                                   autoEvent, 1000, 250);

        // When autoEvent signals, change the period to every half second.
        autoEvent.WaitOne();
        stateTimer.Change(0, 500);
        Console.WriteLine("\nChanging period to .5 seconds.\n");

        // When autoEvent signals the second time, dispose of the timer.
        autoEvent.WaitOne();
        stateTimer.Dispose();
        Console.WriteLine("\nDestroying timer.");
    }
}

class StatusChecker
{
    private int invokeCount;
    private int  maxCount;

    public StatusChecker(int count)
    {
        invokeCount  = 0;
        maxCount = count;
    }

    // This method is called by the timer delegate.
    public void CheckStatus(Object stateInfo)
    {
        AutoResetEvent autoEvent = (AutoResetEvent)stateInfo;
        Console.WriteLine("{0} Checking status {1,2}.", 
            DateTime.Now.ToString("h:mm:ss.fff"), 
            (++invokeCount).ToString());

        if(invokeCount == maxCount)
        {
            // Reset the counter and signal the waiting thread.
            invokeCount = 0;
            autoEvent.Set();
        }
    }
}
// The example displays output like the following:
//       11:59:54.202 Creating timer.
//       
//       11:59:55.217 Checking status  1.
//       11:59:55.466 Checking status  2.
//       11:59:55.716 Checking status  3.
//       11:59:55.968 Checking status  4.
//       11:59:56.218 Checking status  5.
//       11:59:56.470 Checking status  6.
//       11:59:56.722 Checking status  7.
//       11:59:56.972 Checking status  8.
//       11:59:57.223 Checking status  9.
//       11:59:57.473 Checking status 10.
//       
//       Changing period to .5 seconds.
//       
//       11:59:57.474 Checking status  1.
//       11:59:57.976 Checking status  2.
//       11:59:58.476 Checking status  3.
//       11:59:58.977 Checking status  4.
//       11:59:59.477 Checking status  5.
//       11:59:59.977 Checking status  6.
//       12:00:00.478 Checking status  7.
//       12:00:00.980 Checking status  8.
//       12:00:01.481 Checking status  9.
//       12:00:01.981 Checking status 10.
//       
//       Destroying timer.
Imports System.Threading

Public Module Example
    Public Sub Main()
        ' Use an AutoResetEvent to signal the timeout threshold in the
        ' timer callback has been reached.
        Dim autoEvent As New AutoResetEvent(False)

        Dim statusChecker As New StatusChecker(10)

        ' Create a timer that invokes CheckStatus after one second, 
        ' and every 1/4 second thereafter.
        Console.WriteLine("{0:h:mm:ss.fff} Creating timer." & vbCrLf, 
                          DateTime.Now)
        Dim stateTimer As New Timer(AddressOf statusChecker.CheckStatus, 
                                    autoEvent, 1000, 250)

        ' When autoEvent signals, change the period to every half second.
        autoEvent.WaitOne()
        stateTimer.Change(0, 500)
        Console.WriteLine(vbCrLf & "Changing period to .5 seconds." & vbCrLf)

        ' When autoEvent signals the second time, dispose of the timer.
        autoEvent.WaitOne()
        stateTimer.Dispose()
        Console.WriteLine(vbCrLf & "Destroying timer.")
    End Sub
End Module

Public Class StatusChecker
    Dim invokeCount, maxCount As Integer 

    Sub New(count As Integer)
        invokeCount  = 0
        maxCount = count
    End Sub

    ' The timer callback method.
    Sub CheckStatus(stateInfo As Object)
        Dim autoEvent As AutoResetEvent = DirectCast(stateInfo, AutoResetEvent)
        invokeCount += 1
        Console.WriteLine("{0:h:mm:ss.fff} Checking status {1,2}.", 
                          DateTime.Now, invokeCount)
        If invokeCount = maxCount Then
            ' Reset the counter and signal the waiting thread.
            invokeCount = 0
            autoEvent.Set()
        End If
    End Sub
End Class
' The example displays output like the following:
'       11:59:54.202 Creating timer.
'       
'       11:59:55.217 Checking status  1.
'       11:59:55.466 Checking status  2.
'       11:59:55.716 Checking status  3.
'       11:59:55.968 Checking status  4.
'       11:59:56.218 Checking status  5.
'       11:59:56.470 Checking status  6.
'       11:59:56.722 Checking status  7.
'       11:59:56.972 Checking status  8.
'       11:59:57.223 Checking status  9.
'       11:59:57.473 Checking status 10.
'       
'       Changing period to .5 seconds.
'       
'       11:59:57.474 Checking status  1.
'       11:59:57.976 Checking status  2.
'       11:59:58.476 Checking status  3.
'       11:59:58.977 Checking status  4.
'       11:59:59.477 Checking status  5.
'       11:59:59.977 Checking status  6.
'       12:00:00.478 Checking status  7.
'       12:00:00.980 Checking status  8.
'       12:00:01.481 Checking status  9.
'       12:00:01.981 Checking status 10.
'       
'       Destroying timer.

Комментарии

Делегат, заданный callback параметром, вызывается один раз dueTime после истечения времени, period а затем каждый раз, когда истечет интервал времени.The delegate specified by the callback parameter is invoked once after dueTime elapses, and thereafter each time the period time interval elapses.

Если dueTime значение равно нулю (0) callback , вызывается немедленно.If dueTime is zero (0), callback is invoked immediately. Если dueTime параметр Timeout.Infiniteимеет callback значение, Change метод не вызывается; таймер отключен, но может быть включен повторно путем вызова метода.If dueTime is Timeout.Infinite, callback is not invoked; the timer is disabled, but can be re-enabled by calling the Change method.

Поскольку класс имеет то же разрешение, что и системные часы, что составляет примерно 15 миллисекунд на системах Windows 7 и Windows 8 callback , делегат выполняется с интервалами, определенными разрешением системных часов, если Timer periodменьше, чем разрешение системных часов.Because the Timer class has the same resolution as the system clock, which is approximately 15 milliseconds on Windows 7 and Windows 8 systems, the callback delegate executes at intervals defined by the resolution of the system clock if period is less than the resolution of the system clock. Если period значение равно нулю (0) Timeout.Infinite dueTime или не равно Timeout.Infinite, callback вызывается один раз; периодическое поведение таймера отключено, но его можно включить повторно с помощью Change метода.If period is zero (0) or Timeout.Infinite and dueTime is not Timeout.Infinite, callback is invoked once; the periodic behavior of the timer is disabled, but can be re-enabled using the Change method.

Метод, указанный для callback , должен быть повторным, так как он вызывается в ThreadPool потоках.The method specified for callback should be reentrant, because it is called on ThreadPool threads. Метод может быть выполнен одновременно в двух потоках пула потоков, если интервал таймера меньше времени, необходимого для выполнения метода, или если все потоки пула потоков используются и метод помещается в очередь несколько раз.The method can be executed simultaneously on two thread pool threads if the timer interval is less than the time required to execute the method, or if all thread pool threads are in use and the method is queued multiple times.

Дополнительно

Timer(TimerCallback, Object, Int64, Int64)

Инициализирует новый экземпляр класса Timer, используя указанное 64-разрядное знаковое целое число для измерения временных интервалов.Initializes a new instance of the Timer class, using 64-bit signed integers to measure time intervals.

public:
 Timer(System::Threading::TimerCallback ^ callback, System::Object ^ state, long dueTime, long period);
public Timer (System.Threading.TimerCallback callback, object state, long dueTime, long period);
new System.Threading.Timer : System.Threading.TimerCallback * obj * int64 * int64 -> System.Threading.Timer
Public Sub New (callback As TimerCallback, state As Object, dueTime As Long, period As Long)

Параметры

callback
TimerCallback

Делегат TimerCallback, представляющий выполняемый метод.A TimerCallback delegate representing a method to be executed.

state
Object

Объект, содержащий информацию, используемую методом ответного вызова или значение null.An object containing information to be used by the callback method, or null.

dueTime
Int64

Количество времени до начала использования параметра callback, в миллисекундах.The amount of time to delay before callback is invoked, in milliseconds. Следует задать поле Infinite для того, чтобы не допустить запуск таймера.Specify Infinite to prevent the timer from starting. Задайте значение ноль (0) для немедленного запуска таймера.Specify zero (0) to start the timer immediately.

period
Int64

Временной интервал между вызовами параметра callback, в миллисекундах.The time interval between invocations of callback, in milliseconds. Следует задать поле Infinite для отключения периодической сигнализации.Specify Infinite to disable periodic signaling.

Исключения

Значение параметра dueTime или period отрицательно, и не равно Infinite.The dueTime or period parameter is negative and is not equal to Infinite.

Значение параметра dueTime или period больше 4294967294.The dueTime or period parameter is greater than 4294967294.

Комментарии

Делегат, заданный callback параметром, вызывается один раз dueTime после истечения времени, period а затем каждый раз, когда истечет интервал времени.The delegate specified by the callback parameter is invoked once after dueTime elapses, and thereafter each time the period time interval elapses.

Если dueTime значение равно нулю (0) callback , вызывается немедленно.If dueTime is zero (0), callback is invoked immediately. Если dueTime параметр Timeout.Infiniteимеет callback значение, Change метод не вызывается; таймер отключен, но может быть включен повторно путем вызова метода.If dueTime is Timeout.Infinite, callback is not invoked; the timer is disabled, but can be re-enabled by calling the Change method.

Поскольку класс имеет то же разрешение, что и системные часы, что составляет примерно 15 миллисекунд на системах Windows 7 и Windows 8 callback , делегат выполняется с интервалами, определенными разрешением системных часов, если Timer periodменьше, чем разрешение системных часов.Because the Timer class has the same resolution as the system clock, which is approximately 15 milliseconds on Windows 7 and Windows 8 systems, the callback delegate executes at intervals defined by the resolution of the system clock if period is less than the resolution of the system clock. Если period значение равно нулю (0) Timeout.Infinite dueTime или не равно Timeout.Infinite, callback вызывается один раз; периодическое поведение таймера отключено, но его можно включить повторно с помощью Change метода.If period is zero (0) or Timeout.Infinite and dueTime is not Timeout.Infinite, callback is invoked once; the periodic behavior of the timer is disabled, but can be re-enabled using the Change method.

Метод, указанный для callback , должен быть повторным, так как он вызывается в ThreadPool потоках.The method specified for callback should be reentrant, because it is called on ThreadPool threads. Метод может быть выполнен одновременно в двух потоках пула потоков, если интервал таймера меньше времени, необходимого для выполнения метода, или если все потоки пула потоков используются и метод помещается в очередь несколько раз.The method can be executed simultaneously on two thread pool threads if the timer interval is less than the time required to execute the method, or if all thread pool threads are in use and the method is queued multiple times.

Дополнительно

Timer(TimerCallback, Object, TimeSpan, TimeSpan)

Инициализирует новый экземпляр класса Timer, используя значения объекта TimeSpan для измерения временных интервалов.Initializes a new instance of the Timer class, using TimeSpan values to measure time intervals.

public:
 Timer(System::Threading::TimerCallback ^ callback, System::Object ^ state, TimeSpan dueTime, TimeSpan period);
public Timer (System.Threading.TimerCallback callback, object state, TimeSpan dueTime, TimeSpan period);
new System.Threading.Timer : System.Threading.TimerCallback * obj * TimeSpan * TimeSpan -> System.Threading.Timer
Public Sub New (callback As TimerCallback, state As Object, dueTime As TimeSpan, period As TimeSpan)

Параметры

callback
TimerCallback

Делегат, представляющий выполняемый метод.A delegate representing a method to be executed.

state
Object

Объект, содержащий информацию, используемую методом ответного вызова или значение null.An object containing information to be used by the callback method, or null.

dueTime
TimeSpan

Количество времени, которое следует подождать до того, как параметр callback вызовет свои методы.The amount of time to delay before the callback parameter invokes its methods. Следует задать минус одну (-1) миллисекунду для того, чтобы не допустить запуск таймера.Specify negative one (-1) milliseconds to prevent the timer from starting. Задайте значение ноль (0) для немедленного запуска таймера.Specify zero (0) to start the timer immediately.

period
TimeSpan

Временной интервал между вызовами методов, на которые ссылается параметр callback.The time interval between invocations of the methods referenced by callback. Следует задать минус одну (-1) миллисекунду для отключения периодической сигнализации.Specify negative one (-1) milliseconds to disable periodic signaling.

Исключения

Число миллисекунд, заданное значением поля dueTime или period, отрицательно и не равно Infinite, или больше, чем MaxValue.The number of milliseconds in the value of dueTime or period is negative and not equal to Infinite, or is greater than MaxValue.

Параметр callback имеет значение null.The callback parameter is null.

Примеры

В следующем примере кода показано, как создать TimerCallback делегат и инициализировать новый экземпляр Timer класса.The following code example shows how to create a TimerCallback delegate and initialize a new instance of the Timer class.

using namespace System;
using namespace System::Threading;
ref class StatusChecker
{
private:
   int invokeCount;
   int maxCount;

public:
   StatusChecker( int count )
      : invokeCount( 0 ), maxCount( count )
   {}


   // This method is called by the timer delegate.
   void CheckStatus( Object^ stateInfo )
   {
      AutoResetEvent^ autoEvent = dynamic_cast<AutoResetEvent^>(stateInfo);
      Console::WriteLine( "{0} Checking status {1,2}.", DateTime::Now.ToString(  "h:mm:ss.fff" ), (++invokeCount).ToString() );
      if ( invokeCount == maxCount )
      {
         
         // Reset the counter and signal main.
         invokeCount = 0;
         autoEvent->Set();
      }
   }

};

int main()
{
   AutoResetEvent^ autoEvent = gcnew AutoResetEvent( false );
   StatusChecker^ statusChecker = gcnew StatusChecker( 10 );
   
   // Create the delegate that invokes methods for the timer.
   TimerCallback^ timerDelegate = gcnew TimerCallback( statusChecker, &StatusChecker::CheckStatus );
   TimeSpan delayTime = TimeSpan(0,0,1);
   TimeSpan intervalTime = TimeSpan(0,0,0,0,250);
   
   // Create a timer that signals the delegate to invoke CheckStatus 
   // after one second, and every 1/4 second thereafter.
   Console::WriteLine( "{0} Creating timer.\n", DateTime::Now.ToString(  "h:mm:ss.fff" ) );
   Timer^ stateTimer = gcnew Timer( timerDelegate,autoEvent,delayTime,intervalTime );
   
   // When autoEvent signals, change the period to every 1/2 second.
   autoEvent->WaitOne( 5000, false );
   stateTimer->Change( TimeSpan(0), intervalTime + intervalTime );
   Console::WriteLine( "\nChanging period.\n" );
   
   // When autoEvent signals the second time, dispose of the timer.
   autoEvent->WaitOne( 5000, false );
   stateTimer->~Timer();
   Console::WriteLine( "\nDestroying timer." );
}

using System;
using System.Threading;

class TimerExample
{
    static void Main()
    {
        AutoResetEvent autoEvent     = new AutoResetEvent(false);
        StatusChecker  statusChecker = new StatusChecker(10);

        // Create the delegate that invokes methods for the timer.
        TimerCallback timerDelegate = 
            new TimerCallback(statusChecker.CheckStatus);

        TimeSpan delayTime = new TimeSpan(0, 0, 1);
        TimeSpan intervalTime = new TimeSpan(0, 0, 0, 0, 250);

        // Create a timer that signals the delegate to invoke 
        // CheckStatus after one second, and every 1/4 second 
        // thereafter.
        Console.WriteLine("{0} Creating timer.\n", 
            DateTime.Now.ToString("h:mm:ss.fff"));
        Timer stateTimer = new Timer(
            timerDelegate, autoEvent, delayTime, intervalTime);

        // When autoEvent signals, change the period to every 
        // 1/2 second.
        autoEvent.WaitOne(5000, false);
        stateTimer.Change(new TimeSpan(0), 
            intervalTime + intervalTime);
        Console.WriteLine("\nChanging period.\n");

        // When autoEvent signals the second time, dispose of 
        // the timer.
        autoEvent.WaitOne(5000, false);
        stateTimer.Dispose();
        Console.WriteLine("\nDestroying timer.");
    }
}

class StatusChecker
{
    int invokeCount, maxCount;

    public StatusChecker(int count)
    {
        invokeCount  = 0;
        maxCount = count;
    }

    // This method is called by the timer delegate.
    public void CheckStatus(Object stateInfo)
    {
        AutoResetEvent autoEvent = (AutoResetEvent)stateInfo;
        Console.WriteLine("{0} Checking status {1,2}.", 
            DateTime.Now.ToString("h:mm:ss.fff"), 
            (++invokeCount).ToString());

        if(invokeCount == maxCount)
        {
            // Reset the counter and signal Main.
            invokeCount  = 0;
            autoEvent.Set();
        }
    }
}
Imports System.Threading

Public Class TimerExample

    <MTAThread> _
    Shared Sub Main()
    
        Dim autoEvent As New AutoResetEvent(False)
        Dim statusChecker As New StatusChecker(10)

        ' Create the delegate that invokes methods for the timer.
        Dim timerDelegate As TimerCallback = _
            AddressOf statusChecker.CheckStatus

        Dim delayTime As New TimeSpan(0, 0, 1)
        Dim intervalTime As New TimeSpan(0, 0, 0, 0, 250)

        ' Create a timer that signals the delegate to invoke 
        ' CheckStatus after one second, and every 1/4 second 
        ' thereafter.
        Console.WriteLine("{0} Creating timer." & vbCrLf, _
            DateTime.Now.ToString("h:mm:ss.fff"))
        Dim stateTimer As Timer = New Timer( _
            timerDelegate, autoEvent, delayTime, intervalTime)

        ' When autoEvent signals, change the period to every 
        ' 1/2 second.
        autoEvent.WaitOne(5000, False)
        stateTimer.Change( _
            new TimeSpan(0), intervalTime.Add(intervalTime))
        Console.WriteLine(vbCrLf & "Changing period." & vbCrLf)

        ' When autoEvent signals the second time, dispose of 
        ' the timer.
        autoEvent.WaitOne(5000, False)
        stateTimer.Dispose()
        Console.WriteLine(vbCrLf & "Destroying timer.")
    
    End Sub
End Class

Public Class StatusChecker

    Dim invokeCount, maxCount As Integer 

    Sub New(count As Integer)
        invokeCount  = 0
        maxCount = count
    End Sub

    ' This method is called by the timer delegate.
    Sub CheckStatus(stateInfo As Object)
        Dim autoEvent As AutoResetEvent = _
            DirectCast(stateInfo, AutoResetEvent)
        invokeCount += 1
        Console.WriteLine("{0} Checking status {1,2}.", _
            DateTime.Now.ToString("h:mm:ss.fff"), _
            invokeCount.ToString())

        If invokeCount = maxCount Then
        
            ' Reset the counter and signal to stop the timer.
            invokeCount  = 0
            autoEvent.Set()
        End If
    End Sub

End Class

Комментарии

Делегат, заданный callback параметром, вызывается один раз dueTime после истечения времени, period а затем каждый раз, когда истечет интервал времени.The delegate specified by the callback parameter is invoked once after dueTime elapses, and thereafter each time the period time interval elapses.

Если dueTime значение равно нулю (0) callback , вызывается немедленно.If dueTime is zero (0), callback is invoked immediately. Если dueTime имеет отрицательное значение (-1) миллисекунд, callback то Change метод не вызывается; таймер отключается, но может быть включен повторно путем вызова метода.If dueTime is negative one (-1) milliseconds, callback is not invoked; the timer is disabled, but can be re-enabled by calling the Change method.

Поскольку класс имеет то же разрешение, что и системные часы, что составляет примерно 15 миллисекунд на системах Windows 7 и Windows 8 callback , делегат выполняется с интервалами, определенными разрешением системных часов, если Timer periodменьше, чем разрешение системных часов.Because the Timer class has the same resolution as the system clock, which is approximately 15 milliseconds on Windows 7 and Windows 8 systems, the callback delegate executes at intervals defined by the resolution of the system clock if period is less than the resolution of the system clock. Если period равен нулю (0) или минус 1 (-1) миллисекунды и dueTime является положительным callback , вызывается один раз; периодическое поведение таймера отключается, Change но его можно включить повторно с помощью метода.If period is zero (0) or negative one (-1) milliseconds and dueTime is positive, callback is invoked once; the periodic behavior of the timer is disabled, but can be re-enabled using the Change method.

Метод, указанный для callback , должен быть повторным, так как он вызывается в ThreadPool потоках.The method specified for callback should be reentrant, because it is called on ThreadPool threads. Метод может быть выполнен одновременно в двух потоках пула потоков, если интервал таймера меньше времени, необходимого для выполнения метода, или если все потоки пула потоков используются и метод помещается в очередь несколько раз.The method can be executed simultaneously on two thread pool threads if the timer interval is less than the time required to execute the method, or if all thread pool threads are in use and the method is queued multiple times.

Дополнительно

Timer(TimerCallback, Object, UInt32, UInt32)

Важно!

Этот API несовместим с CLS.

Инициализирует новый экземпляр класса Timer, используя указанное 32-разрядное незнаковое целое число для измерения временных интервалов.Initializes a new instance of the Timer class, using 32-bit unsigned integers to measure time intervals.

public:
 Timer(System::Threading::TimerCallback ^ callback, System::Object ^ state, System::UInt32 dueTime, System::UInt32 period);
[System.CLSCompliant(false)]
public Timer (System.Threading.TimerCallback callback, object state, uint dueTime, uint period);
new System.Threading.Timer : System.Threading.TimerCallback * obj * uint32 * uint32 -> System.Threading.Timer
Public Sub New (callback As TimerCallback, state As Object, dueTime As UInteger, period As UInteger)

Параметры

callback
TimerCallback

Делегат, представляющий выполняемый метод.A delegate representing a method to be executed.

state
Object

Объект, содержащий информацию, используемую методом ответного вызова или значение null.An object containing information to be used by the callback method, or null.

dueTime
UInt32

Количество времени до начала использования параметра callback, в миллисекундах.The amount of time to delay before callback is invoked, in milliseconds. Следует задать поле Infinite для того, чтобы не допустить запуск таймера.Specify Infinite to prevent the timer from starting. Задайте значение ноль (0) для немедленного запуска таймера.Specify zero (0) to start the timer immediately.

period
UInt32

Временной интервал между вызовами параметра callback, в миллисекундах.The time interval between invocations of callback, in milliseconds. Следует задать поле Infinite для отключения периодической сигнализации.Specify Infinite to disable periodic signaling.

Атрибуты

Исключения

Значение параметра dueTime или period отрицательно, и не равно Infinite.The dueTime or period parameter is negative and is not equal to Infinite.

Параметр callback имеет значение null.The callback parameter is null.

Комментарии

Делегат, заданный callback параметром, вызывается один раз dueTime после истечения времени, period а затем каждый раз, когда истечет интервал времени.The delegate specified by the callback parameter is invoked once after dueTime elapses, and thereafter each time the period time interval elapses.

Если dueTime значение равно нулю (0) callback , вызывается немедленно.If dueTime is zero (0), callback is invoked immediately. Если dueTime параметр Timeout.Infiniteимеет callback значение, Change метод не вызывается; таймер отключен, но может быть включен повторно путем вызова метода.If dueTime is Timeout.Infinite, callback is not invoked; the timer is disabled, but can be re-enabled by calling the Change method.

Поскольку класс имеет то же разрешение, что и системные часы, что составляет примерно 15 миллисекунд на системах Windows 7 и Windows 8 callback , делегат выполняется с интервалами, определенными разрешением системных часов, если Timer periodменьше, чем разрешение системных часов.Because the Timer class has the same resolution as the system clock, which is approximately 15 milliseconds on Windows 7 and Windows 8 systems, the callback delegate executes at intervals defined by the resolution of the system clock if period is less than the resolution of the system clock. Если period значение равно нулю (0) Timeout.Infinite dueTime или не равно Timeout.Infinite, callback вызывается один раз; периодическое поведение таймера отключено, но его можно включить повторно с помощью Change метода.If period is zero (0) or Timeout.Infinite and dueTime is not Timeout.Infinite, callback is invoked once; the periodic behavior of the timer is disabled, but can be re-enabled using the Change method.

Метод, указанный для callback , должен быть повторным, так как он вызывается в ThreadPool потоках.The method specified for callback should be reentrant, because it is called on ThreadPool threads. Метод может быть выполнен одновременно в двух потоках пула потоков, если интервал таймера меньше времени, необходимого для выполнения метода, или если все потоки пула потоков используются и метод помещается в очередь несколько раз.The method can be executed simultaneously on two thread pool threads if the timer interval is less than the time required to execute the method, or if all thread pool threads are in use and the method is queued multiple times.

Дополнительно

Применяется к