我正在使用一个类来修改一个DateTime,并使用一个TimeSpan来使用DispatchTimer每秒显示一个WPF标签的X小时,Y分钟,Z秒。代码本身给出了正确的时间跨度,但是DispatchTimer给出了错误的输出。我能得到一些关于这里发生的事情的信息吗?
在调试中断期间,仍然会查询ModifiedTime分钟属性(将鼠标悬停在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.";
}发布于 2013-01-23 12:06:00
对每次你打电话给clock.ModifiedTime的时候。在您的调度程序中(4次!)将修改时间增加一分钟,并可能在调试器中再次计算语句。这就解释了你每次增加5次显示的原因。
发布于 2013-01-23 12:05:01
如果我理解正确的话,您希望每经过一秒,就增加一分钟的启动时间。因此,取以秒为单位的差值,然后将其添加为新时间的开始时间的分钟数。
public TimeSpan ModifiedTime
{
get
{
TimeSpan elapsed = DateTime.Now - TimeStarted;
return TimeStarted.AddMinutes(elapsed.TotalSeconds);
}
}https://stackoverflow.com/questions/14472061
复制相似问题