タイマーの秒を表示するラベルがあります(つまり、タイマーの間隔ごとに1が追加される変数があります)。タイマーの間隔は1000に設定されているため、ラベルは1秒ごとに更新されます(また、秒も表示されます)。しかし、ラベルはすでに数百の1秒後にあります。 1秒を取得するための適切な間隔は何ですか?
int _counter = 0;
Timer timer;
timer = new Timer();
timer.Interval = 1000;
timer.Tick += new EventHandler(TimerEventProcessor);
label1.Text = _counter.ToString();
timer.Start();
private void TimerEventProcessor(object sender, EventArgs e)
{
label1.Text = _counter.ToString();
_counter += 1;
}
1秒を取得する適切な間隔は1000です。Interval
プロパティは、ティック間の時間をミリ秒単位で表したものです。
したがって、設定した間隔が間違っているのではありません。タイマーの間隔を変更したり、Tick
イベントを複数回バインドしたりするなど、コードの残りの部分を確認します。
Tick
イベントの代わりに、Elapsed
イベントを使用します。
timer.Elapsed += new EventHandler(TimerEventProcessor);
timerEventProcessorメソッドの署名を変更します。
private void TimerEventProcessor(object sender, ElapsedEventArgs e)
{
label1.Text = _counter.ToString();
_counter += 1;
}
TimerEventProcessorまたはCounterを使用する他の場所はありますか?
とにかく、毎秒1回正確に配信されるイベントに依存することはできません。時間は異なる場合があり、システムは平均時間が正しいことを確認しません。
したがって、_Counterの代わりに、次を使用する必要があります。
// when starting the timer:
DateTime _started = DateTime.UtcNow;
// in TimerEventProcessor:
seconds = (DateTime.UtcNow-started).TotalSeconds;
Label.Text = seconds.ToString();
注:これは、TimerEventProcessorが頻繁に呼び出される問題、または_Counterが頻繁に増分される問題を解決しません。それは単にそれを隠すだけですが、それを行う正しい方法でもあります。