英語で読む

次の方法で共有


TimerCallback 代理人

定義

Timer からの呼び出しを処理するメソッドを表します。

C#
[System.Runtime.InteropServices.ComVisible(true)]
public delegate void TimerCallback(object state);
C#
public delegate void TimerCallback(object? state);
C#
public delegate void TimerCallback(object state);

パラメーター

state
Object

このデリゲートで呼び出されたメソッドに関連するアプリケーション固有の情報を格納するオブジェクト、または null

属性

次のコード例は、 クラスで使用されるデリゲートを作成する方法を Timer 示しています。

C#
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.

注釈

デリゲートを TimerCallback 使用して、 によって呼び出されるメソッドを Timer指定します。 このメソッドは、タイマーを作成したスレッドでは実行されません。システムによって提供される別のスレッド プール スレッドで実行されます。 デリゲートはTimerCallback、開始時刻が経過した後に 1 回メソッドを呼び出し、メソッドが呼び出されるまで、またはメソッドが interval 値 Infiniteで呼び出されるまでDisposeTimer.Change、タイマー間隔ごとに 1 回呼び出しを続けます。

注意

コールバックは、メソッド のオーバーロードが Dispose() 呼び出された後に発生する可能性があります。これは、タイマー キューがスレッド プール スレッドによる実行のコールバックをキューに入れるためです。 メソッド オーバーロードを使用して、 Dispose(WaitHandle) すべてのコールバックが完了するまで待機できます。

タイマー デリゲートは、タイマーが構築されるときに指定され、変更できません。 の開始時刻TimerがコンストラクターのTimerパラメーターにdueTime渡され、ピリオドが パラメーターにperiod渡されます。 デリゲートの作成と使用 TimerCallback を示す例については、「」を参照してください System.Threading.Timer

拡張メソッド

GetMethodInfo(Delegate)

指定したデリゲートによって表されるメソッドを表すオブジェクトを取得します。

適用対象

製品 バージョン
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9, 10
.NET Framework 1.1, 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 1.2, 1.3, 1.4, 1.6, 2.0, 2.1
UWP 10.0

こちらもご覧ください