Timer Конструкторы
Определение
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Инициализирует новый экземпляр класса Timer.
Перегрузки
| Имя | Описание |
|---|---|
| Timer(TimerCallback) |
Инициализирует новый экземпляр Timer класса с бесконечным периодом и бесконечным временем выполнения, используя только что созданный Timer объект в качестве объекта состояния. |
| Timer(TimerCallback, Object, Int32, Int32) |
Инициализирует новый экземпляр |
| Timer(TimerCallback, Object, Int64, Int64) |
Инициализирует новый экземпляр |
| Timer(TimerCallback, Object, TimeSpan, TimeSpan) |
Инициализирует новый экземпляр |
| Timer(TimerCallback, Object, UInt32, UInt32) |
Инициализирует новый экземпляр |
Timer(TimerCallback)
- Исходный код:
- Timer.cs
- Исходный код:
- Timer.cs
- Исходный код:
- Timer.cs
- Исходный код:
- Timer.cs
- Исходный код:
- Timer.cs
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 , представляющий метод, выполняемый.
Примеры
В следующем примере кода создается новый таймер, используя сам таймер в качестве объекта состояния. Метод Change используется для запуска таймера. При обратном вызове таймера объект состояния используется для отключения таймера.
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 сам объект в качестве объекта состояния. После создания таймера Change используйте метод, чтобы задать интервал и время выполнения.
Этот конструктор указывает бесконечное время ожидания перед первым обратным вызовом и бесконечным интервалом между обратными вызовами, чтобы предотвратить первое обратный вызов перед Timer назначением объекта состояния.
Метод, указанный для callback этого метода, должен быть повторен, так как он вызывается в ThreadPool потоках. Метод может выполняться одновременно на двух потоках пула потоков, если интервал таймера меньше времени, необходимого для выполнения метода, или если все потоки пула потоков используются, а метод помещается в очередь несколько раз.
Применяется к
Timer(TimerCallback, Object, Int32, Int32)
- Исходный код:
- Timer.cs
- Исходный код:
- Timer.cs
- Исходный код:
- Timer.cs
- Исходный код:
- Timer.cs
- Исходный код:
- Timer.cs
Инициализирует новый экземпляр Timer класса, используя 32-разрядное целое число со знаком для указания интервала времени.
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);
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 , представляющий метод, выполняемый.
- state
- Object
Объект, содержащий сведения, используемые методом обратного вызова или null.
- dueTime
- Int32
Время задержки до callback вызова в миллисекундах. Укажите Infinite , чтобы предотвратить запуск таймера. Укажите ноль (0), чтобы немедленно запустить таймер.
- period
- Int32
Интервал времени между вызовами в миллисекундах callback. Укажите Infinite , чтобы отключить периодическое сигналирование.
Исключения
dueTime Или period параметр является отрицательным и не равенInfinite.
Параметр callback имеет значение null.
Примеры
В следующем примере кода показано, как создать TimerCallback делегат и инициализировать новый экземпляр 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 истекает интервал времени.
Если dueTime значение равно нулю (0), callback немедленно вызывается. Если dueTime значение Timeout.Infiniteравно, callback не вызывается; таймер отключен, но его можно повторно включить, вызвав Change метод.
Так как класс Timer имеет то же разрешение, что и системные часы, что составляет около 15 миллисекунд в системах Windows 7 и Windows 8, делегат callback выполняется через интервалы, определенные разрешением системных часов, если period меньше разрешения системных часов. Если period значение равно нулю (0) или Timeout.InfinitedueTime нетTimeout.Infinite, callback вызывается один раз; периодическое поведение таймера отключено, но его можно повторно включить с помощью Change метода.
Note
Системные часы, используемые, являются теми же часами, которые используются GetTickCount, которые не влияют на изменения, внесенные в timeBeginPeriod и timeEndPeriod.
Метод, указанный для callback этого метода, должен быть повторен, так как он вызывается в ThreadPool потоках. Метод может выполняться одновременно на двух потоках пула потоков, если интервал таймера меньше времени, необходимого для выполнения метода, или если все потоки пула потоков используются, а метод помещается в очередь несколько раз.
См. также раздел
Применяется к
Timer(TimerCallback, Object, Int64, Int64)
- Исходный код:
- Timer.cs
- Исходный код:
- Timer.cs
- Исходный код:
- Timer.cs
- Исходный код:
- Timer.cs
- Исходный код:
- Timer.cs
Инициализирует новый экземпляр Timer класса, используя 64-разрядные целые числа со знаком для измерения интервалов времени.
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);
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 , представляющий метод, выполняемый.
- state
- Object
Объект, содержащий сведения, используемые методом обратного вызова или null.
- dueTime
- Int64
Время задержки до callback вызова в миллисекундах. Укажите Infinite , чтобы предотвратить запуск таймера. Укажите ноль (0), чтобы немедленно запустить таймер.
- period
- Int64
Интервал времени между вызовами в миллисекундах callback. Укажите Infinite , чтобы отключить периодическое сигналирование.
Исключения
dueTime Или period параметр является отрицательным и не равенInfinite.
Значение dueTime или period параметр больше 4294967294.
Комментарии
Делегат, указанный callback параметром, вызывается один раз после dueTime истечения времени, а затем каждый раз, когда period истекает интервал времени.
Если dueTime значение равно нулю (0), callback немедленно вызывается. Если dueTime значение Timeout.Infiniteравно, callback не вызывается; таймер отключен, но его можно повторно включить, вызвав Change метод.
Так как класс Timer имеет то же разрешение, что и системные часы, что составляет около 15 миллисекунд в системах Windows 7 и Windows 8, делегат callback выполняется через интервалы, определенные разрешением системных часов, если period меньше разрешения системных часов.
Если period значение равно нулю (0) или Timeout.InfinitedueTime нетTimeout.Infinite, callback вызывается один раз; периодическое поведение таймера отключено, но его можно повторно включить с помощью Change метода.
Note
Системные часы, используемые, являются теми же часами, которые используются GetTickCount, которые не влияют на изменения, внесенные в timeBeginPeriod и timeEndPeriod.
Метод, указанный для callback этого метода, должен быть повторен, так как он вызывается в ThreadPool потоках. Метод может выполняться одновременно на двух потоках пула потоков, если интервал таймера меньше времени, необходимого для выполнения метода, или если все потоки пула потоков используются, а метод помещается в очередь несколько раз.
См. также раздел
Применяется к
Timer(TimerCallback, Object, TimeSpan, TimeSpan)
- Исходный код:
- Timer.cs
- Исходный код:
- Timer.cs
- Исходный код:
- Timer.cs
- Исходный код:
- Timer.cs
- Исходный код:
- Timer.cs
Инициализирует новый экземпляр Timer класса, используя TimeSpan значения для измерения интервалов времени.
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);
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
Делегат, представляющий метод, выполняемый.
- state
- Object
Объект, содержащий сведения, используемые методом обратного вызова или null.
- dueTime
- TimeSpan
Время задержки перед callback вызовом. Укажите InfiniteTimeSpan , чтобы предотвратить запуск таймера. Укажите Zero , чтобы запустить таймер немедленно.
- period
- TimeSpan
Интервал времени между вызовами callback. Укажите InfiniteTimeSpan , чтобы отключить периодическое сигналирование.
Исключения
Число миллисекунд в значении dueTime или period отрицательном значении и не равно Infiniteили больше int32.MaxValue.
Параметр callback имеет значение null.
Примеры
В следующем примере кода показано, как создать TimerCallback делегат и инициализировать новый экземпляр 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 истекает интервал времени.
Если dueTime значение равно нулю (0), callback немедленно вызывается. Если dueTime значение отрицательное (-1) миллисекунда, не вызывается; callback таймер отключен, но его можно повторно включить, вызвав Change метод.
Так как класс Timer имеет то же разрешение, что и системные часы, что составляет около 15 миллисекунд в системах Windows 7 и Windows 8, делегат callback выполняется через интервалы, определенные разрешением системных часов, если period меньше разрешения системных часов. Если period значение равно нулю (0) или отрицательному (-1) миллисекундам и dueTime является положительным, callback вызывается один раз; периодическое поведение таймера отключено, но его можно повторно включить с помощью Change метода.
Note
Системные часы, используемые, являются теми же часами, которые используются GetTickCount, которые не влияют на изменения, внесенные в timeBeginPeriod и timeEndPeriod.
Метод, указанный для callback этого метода, должен быть повторен, так как он вызывается в ThreadPool потоках. Метод может выполняться одновременно на двух потоках пула потоков, если интервал таймера меньше времени, необходимого для выполнения метода, или если все потоки пула потоков используются, а метод помещается в очередь несколько раз.
См. также раздел
Применяется к
Timer(TimerCallback, Object, UInt32, UInt32)
- Исходный код:
- Timer.cs
- Исходный код:
- Timer.cs
- Исходный код:
- Timer.cs
- Исходный код:
- Timer.cs
- Исходный код:
- Timer.cs
Важно!
Этот API несовместим с CLS.
Инициализирует новый экземпляр Timer класса, используя 32-разрядные целые числа без знака для измерения интервалов времени.
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);
[System.CLSCompliant(false)]
public Timer(System.Threading.TimerCallback callback, object state, uint dueTime, uint period);
[<System.CLSCompliant(false)>]
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
Делегат, представляющий метод, выполняемый.
- state
- Object
Объект, содержащий сведения, используемые методом обратного вызова или null.
- dueTime
- UInt32
Время задержки до callback вызова в миллисекундах. Укажите Infinite , чтобы предотвратить запуск таймера. Укажите ноль (0), чтобы немедленно запустить таймер.
- period
- UInt32
Интервал времени между вызовами в миллисекундах callback. Укажите Infinite , чтобы отключить периодическое сигналирование.
- Атрибуты
Исключения
dueTime Или period параметр является отрицательным и не равенInfinite.
Параметр callback имеет значение null.
Комментарии
Делегат, указанный callback параметром, вызывается один раз после dueTime истечения времени, а затем каждый раз, когда period истекает интервал времени.
Если dueTime значение равно нулю (0), callback немедленно вызывается. Если dueTime значение Timeout.Infiniteравно, callback не вызывается; таймер отключен, но его можно повторно включить, вызвав Change метод.
Так как класс Timer имеет то же разрешение, что и системные часы, что составляет около 15 миллисекунд в системах Windows 7 и Windows 8, делегат callback выполняется через интервалы, определенные разрешением системных часов, если period меньше разрешения системных часов. Если period значение равно нулю (0) или Timeout.InfinitedueTime нетTimeout.Infinite, callback вызывается один раз; периодическое поведение таймера отключено, но его можно повторно включить с помощью Change метода.
Note
Системные часы, используемые, являются теми же часами, которые используются GetTickCount, которые не влияют на изменения, внесенные в timeBeginPeriod и timeEndPeriod.
Метод, указанный для callback этого метода, должен быть повторен, так как он вызывается в ThreadPool потоках. Метод может выполняться одновременно на двух потоках пула потоков, если интервал таймера меньше времени, необходимого для выполнения метода, или если все потоки пула потоков используются, а метод помещается в очередь несколько раз.