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)

時間間隔を指定するために 32 ビット符号付き整数を使用して、Timer クラスの新しいインスタンスを初期化します。Initializes a new instance of the Timer class, using a 32-bit signed integer to specify the time interval.

Timer(TimerCallback, Object, Int64, Int64)

時間間隔を計るために 64 ビット符号付き整数を使用して、Timer クラスの新しいインスタンスを初期化します。Initializes a new instance of the Timer class, using 64-bit signed integers to measure time intervals.

Timer(TimerCallback, Object, TimeSpan, TimeSpan)

時間間隔を計るために TimeSpan 値を使用して、Timer クラスの新しいインスタンスを初期化します。Initializes a new instance of the Timer class, using TimeSpan values to measure time intervals.

Timer(TimerCallback, Object, UInt32, UInt32)

時間間隔を計るために 32 ビット符号なし整数を使用して、Timer クラスの新しいインスタンスを初期化します。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. タイマー間隔がメソッドの実行に必要な時間よりも少ない場合、またはすべてのスレッドプールスレッドが使用中で、メソッドが複数回キューに登録されている場合、メソッドは2つのスレッドプールスレッドで同時に実行できます。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)

時間間隔を指定するために 32 ビット符号付き整数を使用して、Timer クラスの新しいインスタンスを初期化します。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

コールバック メソッドで使用される情報を格納するオブジェクト。または nullAn 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 、経過後に1回呼び出さ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 Changeの場合、callbackは呼び出されません。タイマーは無効になりますが、メソッドを呼び出すことによって再度有効にすることができます。 Timeout.InfiniteIf dueTime is Timeout.Infinite, callback is not invoked; the timer is disabled, but can be re-enabled by calling the Change method.

クラスはTimer 、windows 7 および windows 8 システムで約15ミリ秒のシステムクロックと同じ解像度を持つため、デリゲートはcallback 、システムクロックの解決によって定義された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) dueTimeまたTimeout.Infiniteはではない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. タイマー間隔がメソッドの実行に必要な時間よりも少ない場合、またはすべてのスレッドプールスレッドが使用中で、メソッドが複数回キューに登録されている場合、メソッドは2つのスレッドプールスレッドで同時に実行できます。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)

時間間隔を計るために 64 ビット符号付き整数を使用して、Timer クラスの新しいインスタンスを初期化します。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

コールバック メソッドで使用される情報を格納するオブジェクト。または nullAn 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 、経過後に1回呼び出さ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 Changeの場合、callbackは呼び出されません。タイマーは無効になりますが、メソッドを呼び出すことによって再度有効にすることができます。 Timeout.InfiniteIf dueTime is Timeout.Infinite, callback is not invoked; the timer is disabled, but can be re-enabled by calling the Change method.

クラスはTimer 、windows 7 および windows 8 システムで約15ミリ秒のシステムクロックと同じ解像度を持つため、デリゲートはcallback 、システムクロックの解決によって定義された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) dueTimeまたTimeout.Infiniteはではない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. タイマー間隔がメソッドの実行に必要な時間よりも少ない場合、またはすべてのスレッドプールスレッドが使用中で、メソッドが複数回キューに登録されている場合、メソッドは2つのスレッドプールスレッドで同時に実行できます。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)

時間間隔を計るために TimeSpan 値を使用して、Timer クラスの新しいインスタンスを初期化します。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

コールバック メソッドで使用される情報を格納するオブジェクト。または nullAn 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 、経過後に1回呼び出さ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 (-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.

クラスはTimer 、windows 7 および windows 8 システムで約15ミリ秒のシステムクロックと同じ解像度を持つため、デリゲートはcallback 、システムクロックの解決によって定義された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. タイマー間隔がメソッドの実行に必要な時間よりも少ない場合、またはすべてのスレッドプールスレッドが使用中で、メソッドが複数回キューに登録されている場合、メソッドは2つのスレッドプールスレッドで同時に実行できます。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 準拠ではありません。

時間間隔を計るために 32 ビット符号なし整数を使用して、Timer クラスの新しいインスタンスを初期化します。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

コールバック メソッドで使用される情報を格納するオブジェクト。または nullAn 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 、経過後に1回呼び出さ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 Changeの場合、callbackは呼び出されません。タイマーは無効になりますが、メソッドを呼び出すことによって再度有効にすることができます。 Timeout.InfiniteIf dueTime is Timeout.Infinite, callback is not invoked; the timer is disabled, but can be re-enabled by calling the Change method.

クラスはTimer 、windows 7 および windows 8 システムで約15ミリ秒のシステムクロックと同じ解像度を持つため、デリゲートはcallback 、システムクロックの解決によって定義された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) dueTimeまたTimeout.Infiniteはではない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. タイマー間隔がメソッドの実行に必要な時間よりも少ない場合、またはすべてのスレッドプールスレッドが使用中で、メソッドが複数回キューに登録されている場合、メソッドは2つのスレッドプールスレッドで同時に実行できます。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.

こちらもご覧ください

適用対象