我正在C#.Net中创建一个时钟应用程序.我有0-9的每个数字的图像.我在主页构造函数中有一个计时器,它每秒钟滴答作响
dispatcherTimer tmr = new dispatcherTimer();
tmr.Interval = TimeSpan.FromSeconds(1);
tmr.Tick += new EventHandler(tmr_Tick);
tmr.Start();
void tmr_Tick(object sender, EventArgs e)
{
dt = DateTime.Now;
UpdateSecondsImages(dt);
}
private void UpdateSecondsImages(DateTime dt)
{
secondSource2 = dt.Second % 10;
secondDigit2.source = digimgs[secondSource2];
if (secondSource2 == 0)
{
secondSource1 = dt.Second / 10;
secondDigit1.source = digimgs[secondSource1];
}
if (secondSource1 == 0)
{
UpdateMinuteImages(dt);
}
}
但是我现在面临的问题是这段代码可能会跳过一分钟,请从性能的角度提出另一种使之平滑的方法.
解决方法:
简单.当您将计时器设置为每秒关闭时,您会说:“请至少睡一秒钟,然后醒来并通知我”.实际上,您可能睡了更长的时间.另外,不同的时序API彼此之间存在时钟漂移.计时器所基于的时钟可能与DateTime.Now所基于的时钟不同.
这样想吧-假设您实际上每1.02秒唤醒一次.
因此,每隔50秒,您将跳过渲染中的一个节拍.例如,您将从“ 49.98”(渲染为“ 49”)醒来,然后在下一个间隔“ 51.00”醒来.
一种简单的解决方法是休眠时间少于1秒.对于您的情况,我建议您在500-750毫秒之间休眠,而不是整整一秒.如果您在相同的第二时间间隔内醒来,则只需再次重新渲染一次即可.或作为一个简单的优化,当您已经醒来之后第二次计数自上次以来没有改变时,什么也不做.
尝试说:
tmr.Interval = TimeSpan.FromMilliSeconds(500);
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。