Ярлык, показывающий, что Timespan исчезает в XP, но не в более новых версиях Windows - PullRequest
1 голос
/ 02 июня 2010

У меня есть таймер секундомера, который я добавил в свою программу. Он отлично работает на моей машине с Win 7, и на машинах с Vista, которые я пробовал, но в XP нули и часы исчезают при запуске таймера, но возвращаются, если я сбросил таймер. Вот весь мой код, который у меня есть для таймера. Я удалил все, что не показалось необходимым для диагностики проблемы:

  DateTime startTime, stopTime;
    TimeSpan stoppedTime;
    bool reset;



    private void btnStopwatchStart_Click(object sender, EventArgs e)
    {
        // Start timer and get starting time
        if (reset)
        {
            reset = false;
            startTime = DateTime.Now;
            stoppedTime = new TimeSpan(0);
        }
        else
        {
            stoppedTime += DateTime.Now - stopTime;
        }
        stopwatchTimer.Enabled = true;
    }

    private void btnStopwatchReset_Click(object sender, EventArgs e)
    {
        // Reset displays to zero
        reset = true;
        lblElapsed.Text = "00:00:00";
    }

    private void btnStopwatchPause_Click(object sender, EventArgs e)
    {
        // Stop timer
        stopTime = DateTime.Now;
        stopwatchTimer.Enabled = false;
    }

    private void stopwatchTimer_Tick(object sender, EventArgs e)
    {
        DateTime currentTime;
        // Determine elapsed and total times
        currentTime = DateTime.Now;

        // Display times
        lblElapsed.Text = HMS(currentTime - startTime - stoppedTime);
    }

    private string HMS(TimeSpan tms)
    {
        // Format time as string, leaving off last six decimal places
        string s = tms.ToString();
        return (s.Substring(0, s.Length - 6));
    }

1 Ответ

2 голосов
/ 02 июня 2010

Старая версия .NET, может быть? Ваша функция HMS () критически зависит от количества цифр, генерируемых TimeSpan.ToString (). Вот лучший способ отформатировать его:

    private static string HMS(TimeSpan tms) {
        return new DateTime(tms.Ticks).ToString("H:mm:ss");
    }
...