TimeSpan和DispatcherTimer

时间:2013-01-23 03:38:36

标签: c# timespan

我正在使用类修改DateTime并使用TimeSpan每秒使用DispatchTimer向WPF标签显示X小时,Y分钟,Z秒。代码本身给出了适当的时间跨度,但是DispatchTimer给出了错误的输出。我能否就这里发生的事情得到一些意见?

在调试中断期间仍然会查询ModifiedTime Minutes属性(将鼠标悬停在ModifiedTime.Minutes上会不断增加数字。),这是常态吗?

运行时输出从3分钟开始,然后显示8分钟,13,18,23,28等。

库:

public Clock() {
  load_ = DateTime.Now;
  time_ = new DateTime();
  time_ = DateTime.Now;
  modifiedTime_ = new DateTime();         
  modifiedTime_ = DateTime.Now;
  difference = TimeSpan.Zero;
}

public TimeSpan ModifiedTime {
  //Convert the real time to timespan.
  //display X Years, Y Days, Z Hours...
  get {
  modifiedTime_ = modifiedTime_.AddMinutes(1.0);
  difference = modifiedTime_.Subtract(time_);
  return difference;
  }
  set { difference = value; }
}

WPF:

DispatcherTimer dispatcherTimer; 
public MainWindow() {
  InitializeComponent();
  dispatcherTimer = new DispatcherTimer();
  dispatcherTimer.Tick += new EventHandler(dispatcherTimer_Tick);
  dispatcherTimer.Interval = new TimeSpan(0, 0, 1);
  dispatcherTimer.Start();
}
private void dispatcherTimer_Tick(object sender, EventArgs e) {
  lblModTime.Content = clock.ModifiedTime.Hours + " hours, " + clock.ModifiedTime.Minutes + " minutes, " + clock.ModifiedTime.Seconds + " seconds, " + clock.ModifiedTime.Milliseconds + " milliseconds.";
}

2 个答案:

答案 0 :(得分:1)

如果我理解正确,你想在每过一秒的时间内加一分钟。因此,以秒为单位取差值,然后在新时间开始的时间内添加。

public TimeSpan ModifiedTime
{
    get
    {
        TimeSpan elapsed = DateTime.Now - TimeStarted;
        return TimeStarted.AddMinutes(elapsed.TotalSeconds);
    }
}

答案 1 :(得分:1)

对,每次调用clock.ModifiedTime。在您的调度程序中(4次!)您在修改时间中添加一分钟,再加上可能再次用于评估调试器中的语句。这可以解释你每次增加5的显示。