1

System.Timers.Timer を取得して、システム クロックと同期して 15 分ごとに Elapsed イベントをトリガーするにはどうすればよいですか? つまり、xx:00、xx:15、xx:30、xx:45 (xx は任意の時間を意味します) に正確にトリガーする必要があります。

4

3 に答える 3

0

プログラムを開始するとき、またはトリガーされるイベント時間を変更するときは、イベント時間をメモリにロードします(ハードドライブからこのデータを毎秒読み取らないようにします)。次に、1秒ごとに起動するようにタイマーを設定します。1秒ごとに起動するように設定されたタイマーは、プロセッサのオーバーヘッドがほとんどありません。1つを設定してタスクマネージャを開くと、タイマーが実行される前よりもプロセッサが実行されていることに気付くことさえありません。次に、タイマーイベントにチェックを入れて、イベントを発生させる時間かどうかを確認します。

于 2012-06-05T11:43:42.867 に答える
0

毎秒経過させて、現在の時刻が 00、15、30、または 45 であるかどうかを確認してから、イベントを転送することができます。

最初のアイデアは次のとおりです。

private static System.Timers.Timer aTimer;
private static System.DateTime _last;

public static void Main()
{
    aTimer = new System.Timers.Timer(10000);

    aTimer.Elapsed += new ElapsedEventHandler(OnTimedEvent);

    aTimer.Interval = 1000;
    aTimer.Enabled = true;

    Console.WriteLine("Press the Enter key to exit the program.");
    Console.ReadLine();
}

private static void OnTimedEvent(object source, ElapsedEventArgs e)
{
    DateTime time = 
        new DateTime( 1,1,1, DateTime.Now.Hours, DateTime.Now.Minute );

    if( time.Minute==0 ||time.Minute==15 || time.Minute==30 || time.Minute==45 )
    {
        // Avoid multiple notifications for the same quarter.
        if ( _last==DateTime.MinValue || _last!=time )
        {
            _last = time;

            // Do further processing.
            doProcessing();
        }
    }
}

(この MSDN ドキュメントに基づく例)

于 2012-06-05T11:38:33.630 に答える