我想在使用 C# 的 Windows 窗体应用程序中每分钟(按时钟)做一些事情。我只是想知道最好的方法是什么?
我可以使用计时器并将其间隔设置为 60000,但要让它在分钟内运行,我必须在分钟内精确地启用它,这不太可行。
我可以使用计时器并将其间隔设置为 1000。然后在它的滴答事件中,我可以根据我设置的变量检查时钟当前分钟,如果分钟已更改,则运行我的代码。这让我很担心,因为我让我的电脑每 1 秒检查一次,以便每 1 分钟执行一次工作。这肯定很丑吧?
我正在使用 Windows 窗体和 .Net 2.0,所以不想使用 .Net 3.5 附带的 DispatchTimer
这一定是一个相当普遍的问题。你们有更好的方法吗?
最佳答案
基于阿奎那的答案,它可以漂移并且不会在一分钟的一秒内准确地在一分钟内滴答作响:
static System.Timers.Timer t;
static void Main(string[] args)
{
t = new System.Timers.Timer();
t.AutoReset = false;
t.Elapsed += new System.Timers.ElapsedEventHandler(t_Elapsed);
t.Interval = GetInterval();
t.Start();
Console.ReadLine();
}
static double GetInterval()
{
DateTime now = DateTime.Now;
return ((60 - now.Second) * 1000 - now.Millisecond);
}
static void t_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
{
Console.WriteLine(DateTime.Now.ToString("o"));
t.Interval = GetInterval();
t.Start();
}
在我的盒子上,这段代码在每分钟 0.02 秒内持续运行:
2010-01-15T16:42:00.0040001-05:00
2010-01-15T16:43:00.0014318-05:00
2010-01-15T16:44:00.0128643-05:00
2010-01-15T16:45:00.0132961-05:00
关于c# - .NET,每分钟(每分钟)发生一次事件。计时器是最好的选择吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1329900/