2010-06-02 55 views
1

我有一个秒表计时器,我已经添加到我的程序中。它在我的Win 7机器以及我试过的Vista机器上运行良好,但在XP中,定时器启动时小时和分钟零点消失,但如果重置计时器,则会返回。这是我的计时器的所有代码。我删除了一切似乎没有必要诊断问题的东西:标签显示Timespan在XP中消失但不是在较新的Windows版本中

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)); 
    } 

回答

2

旧版本的.NET,也许?您的HMS()函数严重依赖于TimeSpan.ToString()生成的数字的数量。下面是更好的格式化方法:

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

谢谢!它在Win7机器上运行得很好(使用.NET 4.0)。它将在几小时内在XP机器上进行测试。 – EvanRyan 2010-06-02 15:47:12

+0

是的,TimeSpan.ToString()在.NET 4.0中进行了修改。我给你的替换将在任何版本的.NET上一致地工作 – 2010-06-02 15:48:59

相关问题