gpt4 book ai didi

c# - 时钟应用

转载 作者:行者123 更新时间:2023-11-30 15:48:04 26 4
gpt4 key购买 nike

我正在用 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);
}
}

但我现在面临的问题是这段代码可能会跳过一分钟。请从性能的角度提出其他方法来使这一过程顺利进行。

最佳答案

简单。当您将计时器设置为每秒关闭时,您是在说,“请在醒来并通知我之前睡至少 1 秒”。事实上,你可能睡得更久。此外,不同的时序 API 之间存在时钟漂移。计时器所基于的时钟可能与 DateTime.Now 所基于的时钟不同。

这样想 - 假设您实际上每 1.02 秒醒来一次。因此,每隔 50 秒,您就会在渲染中跳过一个节拍。例如,您将从“49.98”起床(呈现为“49”),然后下一个时间间隔在“51.00”起床。

简单的解决方法是 sleep 时间少于 1 秒。对于您的情况,我建议 sleep 时间为 500-750 毫秒而不是一整秒。如果您在同一秒间隔内醒来,您可以简单地再次重新渲染同一时间。或者作为一个微不足道的优化,当你已经醒来并且秒数自上次以来没有改变时什么都不做。

试着说: tmr.Interval = TimeSpan.FromMilliSeconds(500);

关于c# - 时钟应用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2995797/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com