我正在使用类修改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.";
}
答案 0 :(得分:1)
如果我理解正确,你想在每过一秒的时间内加一分钟。因此,以秒为单位取差值,然后在新时间开始的时间内添加。
public TimeSpan ModifiedTime
{
get
{
TimeSpan elapsed = DateTime.Now - TimeStarted;
return TimeStarted.AddMinutes(elapsed.TotalSeconds);
}
}
答案 1 :(得分:1)
对,每次调用clock.ModifiedTime。在您的调度程序中(4次!)您在修改时间中添加一分钟,再加上可能再次用于评估调试器中的语句。这可以解释你每次增加5的显示。