0

Execute()たとえば、終了までに 3000 ミリ秒かかるが、タイマー間隔のために 1000 ミリ秒ごとに呼び出されている場合、以下のコードはどうなるでしょうか?

        Timer _timer = new Timer();        
        private void setupTimer()
        {
            _timer.Tick += new EventHandler(pollingTimeElapsed);
            _timer.Interval = 1000;
            _timer.Enabled = true;
            _timer.Start();
        }

        private void pollingTimeElapsed(object sender, EventArgs e)
        {
            Execute();
        }

編集: System.Timers.Timer には .Tick がないため、System.Windows.Forms.Timer を使用しています。

4

1 に答える 1

1

System.Timers.Timer クラスを使用していると仮定しています。

AutoReset にはデフォルト値 (True) があるため、1000 ミリ秒が経過するたびに Elapsed イベントが発生します。

イベントを 1 回だけ発生させたい場合は、AutoReset を False に設定します。

実行コードの実行中にイベントを発生させたくない場合は、次の手順を実行します。

Timer _timer = new Timer();        
private void setupTimer() {
    _timer.Tick += new EventHandler(pollingTimeElapsed);
    _timer.Interval = 1000;
    _timer.Enabled = true;
    _timer.Start();
}

private void pollingTimeElapsed(object sender, EventArgs e) {
    try {
        _timer.Stop()
        Execute();
    } finally {
        _timer.Start()
    }
}
于 2013-04-09T07:22:18.343 に答える