この記事は機械翻訳されています。英語版の記事を表示するには、[英語] のチェック ボックスをオンにしてください。また、テキストにマウス ポインターを合わせると、ポップアップ ウィンドウに英語のテキストを表示することもできます。
翻訳
英語

Timer クラス

 

公開日: 2016年10月

指定した間隔で、スレッド プール スレッドでメソッドを実行するための機構を提供します。 このクラスは継承できません。

この型の .NET Framework ソース コードを参照するには、参照ソースをご覧ください。

名前空間:   System.Threading
アセンブリ:  mscorlib (mscorlib.dll 内)

System.Object
  System.MarshalByRefObject
    System.Threading.Timer

[ComVisibleAttribute(true)]
[HostProtectionAttribute(SecurityAction.LinkDemand, Synchronization = true, 
	ExternalThreading = true)]
public sealed class Timer : MarshalByRefObject, IDisposable

名前説明
System_CAPS_pubmethodTimer(TimerCallback)

新しいインスタンスを初期化、 Timer 無限の期間および無制限の期限を時間、新しく作成されたを使用して Timer 状態オブジェクトとしてオブジェクトです。

System_CAPS_pubmethodTimer(TimerCallback, Object, Int32, Int32)

新しいインスタンスを初期化、 Timer クラス、32 ビット符号付き整数を使用して時間間隔を指定します。

System_CAPS_pubmethodTimer(TimerCallback, Object, Int64, Int64)

新しいインスタンスを初期化、 Timer クラス、64 ビット符号付き整数を使用して時間間隔を計測します。

System_CAPS_pubmethodTimer(TimerCallback, Object, TimeSpan, TimeSpan)

新しいインスタンスを初期化、 Timer クラスを使用して TimeSpan 時間間隔を測定する値。

System_CAPS_pubmethodTimer(TimerCallback, Object, UInt32, UInt32)

新しいインスタンスを初期化、 Timer クラス、32 ビット符号なし整数を使用して時間間隔を計測します。

名前説明
System_CAPS_pubmethodChange(Int32, Int32)

時間間隔を計るために 32 ビット符号付き整数を使用して、タイマーの開始時刻とメソッドの呼び出しの間隔を変更します。

System_CAPS_pubmethodChange(Int64, Int64)

時間間隔を計るために 64 ビット符号付き整数を使用して、タイマーの開始時刻とメソッドの呼び出しの間隔を変更します。

System_CAPS_pubmethodChange(TimeSpan, TimeSpan)

開始時刻とメソッドの呼び出しを使用して、タイマーの間隔を変更 TimeSpan 時間間隔を測定する値。

System_CAPS_pubmethodChange(UInt32, UInt32)

時間間隔を計るために 32 ビット符号なし整数を使用して、タイマーの開始時刻とメソッドの呼び出しの間隔を変更します。

System_CAPS_pubmethodCreateObjRef(Type)

リモート オブジェクトとの通信に使用するプロキシの生成に必要なすべての関連情報を格納しているオブジェクトを作成します。(MarshalByRefObject から継承されます。)

System_CAPS_pubmethodDispose()

現在のインスタンスによって使用されているすべてのリソースを解放 Timerします。

System_CAPS_pubmethodDispose(WaitHandle)

現在のインスタンスによって使用されているすべてのリソースを解放 Timer と、タイマーが破棄されたと通知します。

System_CAPS_pubmethodEquals(Object)

指定したオブジェクトが、現在のオブジェクトと等しいかどうかを判断します。(Object から継承されます。)

System_CAPS_pubmethodGetHashCode()

既定のハッシュ関数として機能します。(Object から継承されます。)

System_CAPS_pubmethodGetLifetimeService()

このインスタンスの有効期間ポリシーを制御する現在の有効期間サービス オブジェクトを取得します。(MarshalByRefObject から継承されます。)

System_CAPS_pubmethodGetType()

現在のインスタンスの Type を取得します。(Object から継承されます。)

System_CAPS_pubmethodInitializeLifetimeService()

このインスタンスの有効期間ポリシーを制御する有効期間サービス オブジェクトを取得します。(MarshalByRefObject から継承されます。)

System_CAPS_pubmethodToString()

現在のオブジェクトを表す文字列を返します。(Object から継承されます。)

System_CAPS_noteメモ

To view the .NET Framework source code for this type, see the Reference Sourcehttp://referencesource.microsoft.com/#mscorlib/system/threading/timer.cs#051a39d380760b26. You can browse through the source code online, download the reference for offline viewing, and step through the sources (including patches and updates) during debugging; see instructionshttp://referencesource.microsoft.com/.

Use a T:System.Threading.TimerCallback delegate to specify the method you want the T:System.Threading.Timer to execute. The signature of the T:System.Threading.TimerCallback delegate is:

void TimerCallback(Object state)

The timer delegate is specified when the timer is constructed, and cannot be changed. The method does not execute on the thread that created the timer; it executes on a T:System.Threading.ThreadPool thread supplied by the system.

System_CAPS_tipヒント

The .NET Framework Class Library includes four classes named Timer, each of which offers different functionality:

  • 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, 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. 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, a Windows Forms component that fires an event and executes the code in one or more event sinks at regular intervals. 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, an ASP.NET component that performs asynchronous or synchronous web page postbacks at a regular interval.

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). The T:System.Threading.Timer class has the same resolution as the system clock. This means that if the period is less than the resolution of the system clock, the T:System.Threading.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. You can change the due time and period, or disable the timer, by using the M:System.Threading.Timer.Change(System.Int32,System.Int32) method.

System_CAPS_noteメモ

As long as you are using a T:System.Threading.Timer, you must keep a reference to it. As with any managed object, a T:System.Threading.Timer is subject to garbage collection when there are no references to it. The fact that a T:System.Threading.Timer is still active does not prevent it from being collected.

When a timer is no longer needed, use the Overload:System.Threading.Timer.Dispose method to free the resources held by the timer. Note that callbacks can occur after the M:System.Threading.Timer.Dispose method overload has been called, because the timer queues callbacks for execution by thread pool threads. You can use the M:System.Threading.Timer.Dispose(System.Threading.WaitHandle) method overload to wait until all callbacks have completed.

The callback method executed by the timer should be reentrant, because it is called on T:System.Threading.ThreadPool threads. 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_CAPS_noteメモ

System.Threading.Timer is a simple, lightweight timer that uses callback methods and is served by thread pool threads. It is not recommended for use with Windows Forms, because its callbacks do not occur on the user interface thread. System.Windows.Forms.Timer is a better choice for use with Windows Forms. For server-based timer functionality, you might consider using System.Timers.Timer, which raises events and has additional features.

The following example defines a StatusChecker class that includes a CheckStatus method whose signature is the same as the T:System.Threading.TimerCallback delegate. The state argument of the CheckStatus method is an T:System.Threading.AutoResetEvent object that is used to synchronize the application thread and the thread pool thread that executes the callback delegate. 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.

The application thread creates the timer, which waits one second and then executes the CheckStatus callback method every 250 milliseconds. The application thread then blocks until the T:System.Threading.AutoResetEvent object is signaled. When the CheckStatus callback method executes maxCount times, it calls the AutoResetEvent.Set method to set the state of the T:System.Threading.AutoResetEvent object to signaled. The first time this happens, the application thread calls the M:System.Threading.Timer.Change(System.Int32,System.Int32) method so that the callback method now executes every half second. It once again blocks until the T:System.Threading.AutoResetEvent object is signaled. When this happens, the timer is destroyed by calling its M:System.Threading.Timer.Dispose method, and the application terminates.

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.

ユニバーサル Windows プラットフォーム
8.1 以降で使用可能
.NET Framework
1.1 以降で使用可能
ポータブル クラス ライブラリ
サポート対象: 移植可能 .NET プラットフォーム
Silverlight
2.0 以降で使用可能
Windows Phone Silverlight
7.0 以降で使用可能
Windows Phone
8.1 以降で使用可能

This type is thread safe.

トップに戻る
表示: