1

などを作成するSystem.Timers.Timerと...

private System.Timers.Timer m_checker = new System.Timers.Timer();
public MyClass()
{
    Debug.WriteLine("[threadid:" + Thread.CurrentThread.ManagedThreadId + "] Main Thread");
    m_checker.Elapsed += m_checker_Elapsed;
    m_checker.Interval = 1000;
    m_checker.Start();
}

private void m_checker_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
{
    Debug.WriteLine("[threadid:" + Thread.CurrentThread.ManagedThreadId + "]");
}

間隔を 1000 に設定した結果:

/*
[threadid:10] Main Thread
[threadid:7]
[threadid:7]
[threadid:7]
[threadid:12]
[threadid:7]
[threadid:12]
etc...
*/

間隔を 2000 に設定した結果:

/*
[threadid:10] Main Thread
[threadid:7]
[threadid:7]
[threadid:7]
[threadid:7]
etc...
*/

Elapsedイベントが発生しているときに、イベントが異なるスレッドを表示していることがわかります。値を(1000ではなく)2000などのより高い値に変更するIntervalと、同じスレッドにとどまるように見えます。

何故ですか?

独自のスレッドで起動するが、複数のスレッドではなく 1 つのスレッドで起動するタイマーが必要です。

4

2 に答える 2