1

ストップウォッチとオプションを刻むカウントダウンの両方として機能するクロノメーターフォームアプリケーションを作成しようとしています。問題は、ミリ秒を描画できないように見えることです。現在、ミリ秒がない場合、Tick メソッドは次のようになります。

    private void timer_Tick(object sender, EventArgs e)
    {
        if (timespan.TotalSeconds > 0)
        {
            timespan = timespan.Add(new TimeSpan(0, 0, -1));
            updateNumericUpDowns();
        }
        else
        {
            timerCountown.Stop();
        }
    }

UI を更新する方法:

    private void updateNumericUpDowns()
    {
        numericUpDownSeconds.Value = Convert.ToInt32(timespan.Seconds);
        numericUpDownMinutes.Value = Convert.ToInt32(timespan.Minutes);
        numericUpDownHours.Value = Convert.ToInt32(timespan.Hours);
    }

助けていただければ幸いです。

4

2 に答える 2

2

私がフォローしているかどうかはわかりません。なぜ使用しないのtimespan.Millisecondsですか?

そのまま、時、分、秒を使用しています。ミリ秒を表示する場合は、それを追加します。

于 2012-08-23T00:28:07.103 に答える
2

ミリ秒単位の解像度で「timer_Tick」を信頼するとは思いません。システムの負荷が高い場合、ティックは 1 秒より遅くなったり速くなったりしますか? (経過ミリ秒数に影響しますか?) 現在の時刻を既知の開始時刻と比較してみてください。

private DateTime startTime;

void StartTimer() {
    startTime = DateTime.Now;
    //start timer
}

private void timer_Tick(object sender, EventArgs e)
{
    var currentTime = DateTime.Now;
    timespan = currentTime - startTime; //positive
    bool hasCountdownTerminated = ... //maybe something like timespan < duration + timerResolution
    if (hasCountdownTerminated)
    {
        timerCountown.Stop();
    }
    else
    {
        updateNumericUpDowns();
    }
}    

void updateNumericUpDowns() {
    //use timespan.Milliseconds;
}
于 2012-08-23T00:31:36.987 に答える