Timer 建構函式

定義

初始化 Timer 類別的新執行個體。

多載

Timer(TimerCallback)

以無限週期和無限到期時間初始化 Timer 類別的新執行個體,利用新建立 Timer 物件做為狀態物件。

Timer(TimerCallback, Object, Int32, Int32)

初始化 Timer 類別的新執行個體,使用 32 位元帶正負號的整數來指定時間間隔。

Timer(TimerCallback, Object, Int64, Int64)

初始化 Timer 類別的新執行個體,使用 64 位元帶正負號的整數來測量時間間隔。

Timer(TimerCallback, Object, TimeSpan, TimeSpan)

初始化 Timer 類別的新執行個體,使用 TimeSpan 值來測量時間間隔。

Timer(TimerCallback, Object, UInt32, UInt32)

初始化 Timer 類別的新執行個體,使用 32 位元不帶正負號的整數 (Unsigned Integer) 來測量時間間隔。

Timer(TimerCallback)

來源:
Timer.cs
來源:
Timer.cs
來源:
Timer.cs

以無限週期和無限到期時間初始化 Timer 類別的新執行個體,利用新建立 Timer 物件做為狀態物件。

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 類別的新執行個體,使用 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 以停用週期的信號功能。

例外狀況

dueTimeperiod 參數是負的,且不等於 Infinite

callback 參數為 null

範例

下列程式碼範例示範如何建立 TimerCallback 委派,並初始化 類別的新實例 Timer

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 時間間隔經過時都會叫用一次。

如果 dueTime 為零 (0) , callback 則會立即叫用 。 如果 為 dueTimeTimeout.Infinitecallback 則不會叫用;計時器已停用,但可藉由呼叫 Change 方法重新啟用。

因為 類別 Timer 的解析度與系統時鐘相同,這在 Windows 7 和 Windows 8 系統上大約是 15 毫秒, callback 所以如果 period 小於系統時鐘的解析度,委派會以系統時鐘解析所定義的間隔執行。 如果 period 為零 (0) 或 Timeout.InfinitedueTime 不是 Timeout.Infinitecallback 則會叫用 Change 一次;計時器的定期行為已停用,但可以使用 方法重新啟用。

注意

所使用的系統時鐘與 GetTickCount所使用的時鐘相同,不受 timeBeginPeriodtimeEndPeriod所做的變更影響。

針對 callback 指定的 方法應該重新進入,因為它會線上程上 ThreadPool 呼叫。 如果計時器間隔小於執行方法所需的時間,或所有線程集區執行緒正在使用中,而且方法已排入佇列多次,則可以在兩個執行緒集區執行緒上同時執行方法。

另請參閱

適用於

Timer(TimerCallback, Object, Int64, Int64)

來源:
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 以停用週期的信號功能。

例外狀況

dueTimeperiod 參數是負的,且不等於 Infinite

dueTimeperiod 參數大於 4294967294。

備註

參數指定的 callback 委派會在經過之後 dueTime 叫用一次,之後每次 period 時間間隔經過時都會叫用一次。

如果 dueTime 為零 (0) , callback 則會立即叫用 。 如果 為 dueTimeTimeout.Infinitecallback 則不會叫用;計時器已停用,但可藉由呼叫 Change 方法重新啟用。

因為 類別 Timer 的解析度與系統時鐘相同,這在 Windows 7 和 Windows 8 系統上大約是 15 毫秒, callback 所以如果 period 小於系統時鐘的解析度,委派會以系統時鐘解析所定義的間隔執行。 如果 period 為零 (0) 或 Timeout.InfinitedueTime 不是 Timeout.Infinitecallback 則會叫用 Change 一次;計時器的定期行為已停用,但可以使用 方法重新啟用。

注意

所使用的系統時鐘與 GetTickCount所使用的時鐘相同,不受 timeBeginPeriodtimeEndPeriod所做的變更影響。

針對 callback 指定的 方法應該重新進入,因為它會線上程上 ThreadPool 呼叫。 如果計時器間隔小於執行方法所需的時間,或所有線程集區執行緒正在使用中,而且方法已排入佇列多次,則可以在兩個執行緒集區執行緒上同時執行方法。

另請參閱

適用於

Timer(TimerCallback, Object, TimeSpan, TimeSpan)

來源:
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 以停用週期的信號功能。

例外狀況

perioddueTime 中的毫秒數為負數,且不等於 Infinite ,或 大於Int32.MaxValue

callback 參數為 null

範例

下列程式碼範例示範如何建立 TimerCallback 委派,並初始化 類別的新實例 Timer

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 時間間隔經過時都會叫用一次。

如果 dueTime 為零 (0) , callback 則會立即叫用 。 如果 dueTime 為負數一 (-1) 毫秒, callback 則不會叫用;計時器已停用,但可以藉由呼叫 Change 方法重新啟用。

因為 類別 Timer 的解析度與系統時鐘相同,這在 Windows 7 和 Windows 8 系統上大約是 15 毫秒, callback 所以如果 period 小於系統時鐘的解析度,委派會以系統時鐘解析所定義的間隔執行。 如果 period 為零 (0) 或負一 (-1) 毫秒且 dueTime 為正數,則會叫用 Change 一次; callback 計時器的定期行為會停用,但可以使用 方法重新啟用。

注意

所使用的系統時鐘與 GetTickCount所使用的時鐘相同,不受 timeBeginPeriodtimeEndPeriod所做的變更影響。

針對 callback 指定的 方法應該重新進入,因為它會線上程上 ThreadPool 呼叫。 如果計時器間隔小於執行方法所需的時間,或所有線程集區執行緒正在使用中,而且方法已排入佇列多次,則可以在兩個執行緒集區執行緒上同時執行方法。

另請參閱

適用於

Timer(TimerCallback, Object, UInt32, UInt32)

來源:
Timer.cs
來源:
Timer.cs
來源:
Timer.cs

重要

此 API 不符合 CLS 規範。

初始化 Timer 類別的新執行個體,使用 32 位元不帶正負號的整數 (Unsigned Integer) 來測量時間間隔。

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 以停用週期的信號功能。

屬性

例外狀況

dueTimeperiod 參數是負的,且不等於 Infinite

callback 參數為 null

備註

參數指定的 callback 委派會在經過之後 dueTime 叫用一次,之後每次 period 時間間隔經過時都會叫用一次。

如果 dueTime 為零 (0) , callback 則會立即叫用 。 如果 為 dueTimeTimeout.Infinitecallback 則不會叫用;計時器已停用,但可藉由呼叫 Change 方法重新啟用。

因為 類別 Timer 的解析度與系統時鐘相同,這在 Windows 7 和 Windows 8 系統上大約是 15 毫秒, callback 所以如果 period 小於系統時鐘的解析度,委派會以系統時鐘的解析度所定義的間隔執行。 如果 period 為零 (0) 或 Timeout.Infinite 不是 Timeout.Infinitecallback 則會 dueTime 叫用一次;計時器的定期行為會停用,但可以使用 方法重新啟用 Change

注意

所使用的系統時鐘是 GetTickCount所使用的相同時鐘,這不會受到 timeBeginPeriodtimeEndPeriod所做的變更所影響。

針對 指定的 callback 方法應該重新進入,因為它線上程上 ThreadPool 呼叫。 如果計時器間隔小於執行方法所需的時間,或者所有線程集區執行緒都正在使用中,而且方法已排入佇列多次,則可以在兩個執行緒集區執行緒上同時執行。

另請參閱

適用於