Timer Timer Timer Timer Class

定義

指定した間隔で、スレッド プール スレッドでメソッドを実行するための機構を提供します。 Provides a mechanism for executing a method on a thread pool thread at specified intervals. このクラスは継承できません。 This class cannot be inherited.

public ref class Timer sealed : MarshalByRefObject, IDisposable
[System.Runtime.InteropServices.ComVisible(true)]
public sealed class Timer : MarshalByRefObject, IDisposable
type Timer = class
    inherit MarshalByRefObject
    interface IDisposable
Public NotInheritable Class Timer
Inherits MarshalByRefObject
Implements IDisposable
継承
属性
実装

次の例では、定義、StatusCheckerクラスが含まれる、CheckStatusメソッド シグネチャを持つ、同じとして、TimerCallbackデリゲートします。The following example defines a StatusChecker class that includes a CheckStatus method whose signature is the same as the TimerCallback delegate. stateの引数、CheckStatusメソッドは、AutoResetEventアプリケーション スレッドとコールバック デリゲートを実行するスレッド プールのスレッドを同期するために使用するオブジェクト。The state argument of the CheckStatus method is an AutoResetEvent object that is used to synchronize the application thread and the thread pool thread that executes the callback delegate. StatusCheckerクラスには、2 つの状態変数も含まれています。The StatusChecker class also includes two state variables:

invokeCount
コールバック メソッドが呼び出された回数を示します。Indicates the number of times the callback method has been invoked.

maxCount
コールバック メソッドを呼び出す必要が最大回数を決定します。Determines the maximum number of times the callback method should be invoked.

アプリケーション スレッドが 1 秒間待機しを実行すると、タイマーを作成、CheckStatusコールバック メソッド 250 ミリ秒ごと。The application thread creates the timer, which waits one second and then executes the CheckStatus callback method every 250 milliseconds. されるまで、アプリケーション スレッドをブロックし、AutoResetEventオブジェクトがシグナル状態します。The application thread then blocks until the AutoResetEvent object is signaled. ときに、CheckStatusコールバック メソッドが実行されるmaxCount回呼び出し、AutoResetEvent.Setの状態を設定するメソッドをAutoResetEventオブジェクトがシグナル状態にします。When the CheckStatus callback method executes maxCount times, it calls the AutoResetEvent.Set method to set the state of the AutoResetEvent object to signaled. これは、最初に、アプリケーションのスレッドが、Change(Int32, Int32)メソッドのコールバック メソッドでは、0.5 秒おきようになりましたが実行されるようにします。The first time this happens, the application thread calls the Change(Int32, Int32) method so that the callback method now executes every half second. まで再度ブロック、AutoResetEventオブジェクトがシグナル状態します。It once again blocks until the AutoResetEvent object is signaled. 呼び出すことにより、タイマーが破棄されるこのような場合は、そのDisposeメソッド、およびアプリケーションを終了します。When this happens, the timer is destroyed by calling its Dispose method, and the application terminates.

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.

注釈

使用して、TimerCallback方法を指定するデリゲート、Timerを実行します。Use a TimerCallback delegate to specify the method you want the Timer to execute. 署名、TimerCallbackデリゲートは。The signature of the TimerCallback delegate is:

void TimerCallback(Object state)  
void TimerCallback(Object state)  
Sub TimerCallback(state As Object)  

タイマーが構築され、変更することはできません、タイマーのデリゲートを指定します。The timer delegate is specified when the timer is constructed, and cannot be changed. メソッドは、タイマーは; を作成したスレッドで実行されません。上で実行、ThreadPoolシステムによって付与されたスレッド。The method does not execute on the thread that created the timer; it executes on a ThreadPool thread supplied by the system.

ヒント

.NET には、という名前の 4 つのクラスが含まれています。 Timer、それぞれ異なる機能を備えたの。.NET includes four classes named Timer, each of which offers different functionality:

  • System.Timers.Timer、またはイベントの詳細については、一定の間隔でシンクをイベントを発生させるし、いずれかでコードを実行します。System.Timers.Timer, which fires an event and executes the code in one or more event sinks at regular intervals. サーバー ベースとして使用またはマルチ スレッド環境でサービス コンポーネントのクラスが対象としていますユーザー インターフェイスがないと、実行時に表示されていません。The class is intended for use as a server-based or service component in a multithreaded environment; it has no user interface and is not visible at runtime.
  • System.Threading.Timer、一定の間隔でスレッド プールのスレッドで 1 つのコールバック メソッドを実行します。System.Threading.Timer, which executes a single callback method on a thread pool thread at regular intervals. タイマーがインスタンス化され、変更できないときに、コールバック メソッドが定義されます。The callback method is defined when the timer is instantiated and cannot be changed. ように、System.Timers.Timerクラスでは、このクラスは、マルチ スレッド環境でサーバー ベースまたはサービス コンポーネントとして使用するためです。 ユーザー インターフェイスを持たないは実行時に表示されません。Like the System.Timers.Timer class, this class is intended for use as a server-based or service component in a multithreaded environment; it has no user interface and is not visible at runtime.
  • System.Windows.Forms.Timer (.NET framework のみ)、Windows フォーム コンポーネントでイベントが発生し、一定の間隔で 1 つまたは複数のイベント シンクにコードを実行します。System.Windows.Forms.Timer (.NET Framework only), a Windows Forms component that fires an event and executes the code in one or more event sinks at regular intervals. コンポーネントのユーザー インターフェイスを持たないし、は、シングル スレッド環境で使用するために設計されていますUI スレッドで実行します。The component has no user interface and is designed for use in a single-threaded environment; it executes on the UI thread.
  • System.Web.UI.Timer (.NET framework のみ) を定期的に非同期または同期の web ページのポストバックを実行する ASP.NET コンポーネント。System.Web.UI.Timer (.NET Framework only), an ASP.NET component that performs asynchronous or synchronous web page postbacks at a regular interval.

タイマーを作成するときに、メソッドの最初の実行前に待機する時間の量を指定できます (期限) と 2 回目以降 (ピリオド) 間の待機時間。When you create a timer, you can specify an amount of time to wait before the first execution of the method (due time), and an amount of time to wait between subsequent executions (period). Timerクラスには、システム クロックと同じ解像度。The Timer class has the same resolution as the system clock. つまり、期間は、システム時計の解像度より小さい場合、TimerCallbackデリゲートは、Windows 7 および Windows 8 のシステムでは、約 15 ミリ秒であるシステム時計の解像度で定義された間隔で実行されます。This means that if the period is less than the resolution of the system clock, the TimerCallback delegate will execute at intervals defined by the resolution of the system clock, which is approximately 15 milliseconds on Windows 7 and Windows 8 systems. 期限を変更する時間と期間、または無効化を使用して、タイマー、Changeメソッド。You can change the due time and period, or disable the timer, by using the Change method.

注意

使用している限り、Timerへの参照を保持する必要があります。As long as you are using a Timer, you must keep a reference to it. 管理対象のオブジェクトと同様、Timerへの参照がない場合に、ガベージ コレクションの対象です。As with any managed object, a Timer is subject to garbage collection when there are no references to it. 事実をTimerがまだアクティブでは収集されてから防止されません。The fact that a Timer is still active does not prevent it from being collected.

使用して、タイマーを不要になったとき、Disposeタイマーによって保持されているリソースを解放するメソッド。When a timer is no longer needed, use the Dispose method to free the resources held by the timer. コールバックが後に発生することことに注意してください、Dispose()メソッドのオーバー ロードが呼び出されたため、タイマー キューのスレッド プールのスレッドでコールバックを実行します。Note that callbacks can occur after the Dispose() method overload has been called, because the timer queues callbacks for execution by thread pool threads. 使用することができます、Dispose(WaitHandle)メソッドのオーバー ロードは、すべてのコールバックが完了するまで待機します。You can use the Dispose(WaitHandle) method overload to wait until all callbacks have completed.

呼び出されるために、タイマーが実行するコールバック メソッドが、再入可能にする必要がありますThreadPoolスレッド。The callback method executed by the timer should be reentrant, because it is called on ThreadPool threads. コールバックは、タイマーの間隔がコールバックの実行に必要な時間より小さい場合、またはすべてのスレッド プールのスレッドが使用されており、コールバックが複数回のキューに置かれた場合、2 つのスレッド プール スレッドで同時に実行できます。The callback can be executed simultaneously on two thread pool threads if the timer interval is less than the time required to execute the callback, or if all thread pool threads are in use and the callback is queued multiple times.

注意

System.Threading.Timer コールバック メソッドを使用し、スレッド プールのスレッドによって処理されますが、単純で軽量なタイマーです。System.Threading.Timer is a simple, lightweight timer that uses callback methods and is served by thread pool threads. これは、ユーザー インターフェイス スレッドでそのコールバックが発生しないため、Windows フォームで使用するため推奨されません。It is not recommended for use with Windows Forms, because its callbacks do not occur on the user interface thread. System.Windows.Forms.Timer 使用する Windows フォームで使用することをお勧めします。System.Windows.Forms.Timer is a better choice for use with Windows Forms. サーバー ベースのタイマーの機能の使用を検討できますSystem.Timers.Timerイベントを発生させ、機能が追加されます。For server-based timer functionality, you might consider using System.Timers.Timer, which raises events and has additional features.

コンストラクター

Timer(TimerCallback) Timer(TimerCallback) Timer(TimerCallback) 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(TimerCallback, Object, Int32, Int32) Timer(TimerCallback, Object, Int32, Int32) 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) Timer(TimerCallback, Object, Int64, Int64) Timer(TimerCallback, Object, Int64, Int64) 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) Timer(TimerCallback, Object, TimeSpan, TimeSpan) Timer(TimerCallback, Object, TimeSpan, TimeSpan) 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) Timer(TimerCallback, Object, UInt32, UInt32) Timer(TimerCallback, Object, UInt32, UInt32) Timer(TimerCallback, Object, UInt32, UInt32)

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

方法

Change(Int32, Int32) Change(Int32, Int32) Change(Int32, Int32) Change(Int32, Int32)

時間間隔を計るために 32 ビット符号付き整数を使用して、タイマーの開始時刻とメソッドの呼び出しの間隔を変更します。 Changes the start time and the interval between method invocations for a timer, using 32-bit signed integers to measure time intervals.

Change(Int64, Int64) Change(Int64, Int64) Change(Int64, Int64) Change(Int64, Int64)

時間間隔を計るために 64 ビット符号付き整数を使用して、タイマーの開始時刻とメソッドの呼び出しの間隔を変更します。 Changes the start time and the interval between method invocations for a timer, using 64-bit signed integers to measure time intervals.

Change(TimeSpan, TimeSpan) Change(TimeSpan, TimeSpan) Change(TimeSpan, TimeSpan) Change(TimeSpan, TimeSpan)

時間間隔を計るために TimeSpan 値を使用して、タイマーの開始時刻とメソッドの呼び出しの間隔を変更します。 Changes the start time and the interval between method invocations for a timer, using TimeSpan values to measure time intervals.

Change(UInt32, UInt32) Change(UInt32, UInt32) Change(UInt32, UInt32) Change(UInt32, UInt32)

時間間隔を計るために 32 ビット符号なし整数を使用して、タイマーの開始時刻とメソッドの呼び出しの間隔を変更します。 Changes the start time and the interval between method invocations for a timer, using 32-bit unsigned integers to measure time intervals.

CreateObjRef(Type) CreateObjRef(Type) CreateObjRef(Type) CreateObjRef(Type)

リモート オブジェクトとの通信に使用するプロキシの生成に必要な情報をすべて格納しているオブジェクトを作成します。 Creates an object that contains all the relevant information required to generate a proxy used to communicate with a remote object.

(Inherited from MarshalByRefObject)
Dispose() Dispose() Dispose() Dispose()

Timer の現在のインスタンスによって使用されているすべてのリソースを解放します。 Releases all resources used by the current instance of Timer.

Dispose(WaitHandle) Dispose(WaitHandle) Dispose(WaitHandle) Dispose(WaitHandle)

Timer の現在のインスタンスによって使用されているすべてのリソースを解放し、タイマーが破棄されたときに通知します。 Releases all resources used by the current instance of Timer and signals when the timer has been disposed of.

Equals(Object) Equals(Object) Equals(Object) Equals(Object)

指定したオブジェクトが、現在のオブジェクトと等しいかどうかを判断します。 Determines whether the specified object is equal to the current object.

(Inherited from Object)
Finalize() Finalize() Finalize() Finalize()
GetHashCode() GetHashCode() GetHashCode() GetHashCode()

既定のハッシュ関数として機能します。 Serves as the default hash function.

(Inherited from Object)
GetLifetimeService() GetLifetimeService() GetLifetimeService() GetLifetimeService()

対象のインスタンスの有効期間ポリシーを制御する、現在の有効期間サービス オブジェクトを取得します。 Retrieves the current lifetime service object that controls the lifetime policy for this instance.

(Inherited from MarshalByRefObject)
GetType() GetType() GetType() GetType()

現在のインスタンスの Type を取得します。 Gets the Type of the current instance.

(Inherited from Object)
InitializeLifetimeService() InitializeLifetimeService() InitializeLifetimeService() InitializeLifetimeService()

このインスタンスの有効期間ポリシーを制御する有効期間サービス オブジェクトを取得します。 Obtains a lifetime service object to control the lifetime policy for this instance.

(Inherited from MarshalByRefObject)
MemberwiseClone() MemberwiseClone() MemberwiseClone() MemberwiseClone()

現在の Object の簡易コピーを作成します。 Creates a shallow copy of the current Object.

(Inherited from Object)
MemberwiseClone(Boolean) MemberwiseClone(Boolean) MemberwiseClone(Boolean) MemberwiseClone(Boolean)

現在の MarshalByRefObject オブジェクトの簡易コピーを作成します。 Creates a shallow copy of the current MarshalByRefObject object.

(Inherited from MarshalByRefObject)
ToString() ToString() ToString() ToString()

現在のオブジェクトを表す文字列を返します。 Returns a string that represents the current object.

(Inherited from Object)

適用対象

スレッド セーフ

この型はスレッド セーフです。 This type is thread safe.

こちらもご覧ください