在我的Windows 8应用程序中,我想在TextBlock元素中显示当前时间。时间值应该每秒更新一次。下面的代码工作正常,但我认为这不完全是理想的解决方案。那么有没有更好的方法来做到这一点?如何将DateTime.Now绑定到TextBlock?
public class Clock : Common.BindableBase {
private string _time;
public string Time {
get { return _time; }
set { SetProperty<string>(ref _time, value); }
}
}
private void startPeriodicTimer() {
if (PeriodicTimer == null) {
TimeSpan period = TimeSpan.FromSeconds(1);
PeriodicTimer = ThreadPoolTimer.CreatePeriodicTimer((source) => {
Dispatcher.RunAsync(CoreDispatcherPriority.Normal,
() => {
DateTime time = DateTime.Now;
clock.Time = string.Format("{0:HH:mm:ss tt}", time);
[...]
});
}, period);
}
}
在LoadState的方法:
clock = new Clock();
clock.Time = string.Format("{0:HH:mm:ss tt}", DateTime.Now);
currentTime.DataContext = clock;
startPeriodicTimer();
使用一个定时器..... –
你应该更频繁地轮询。如果你每秒钟做一次,你可能会发现时钟似乎会出现口吃或跳跃。由于时钟精度和CPU时序问题,“每秒一次”不能保证以* 1秒的间隔*运行。在任何一个方向上都可能是几毫秒。所以设置一个500毫秒的值,它会更平滑。 –