c# - .NET,每分钟(每分钟)发生一次事件。计时器是最好的选择吗?

标签 c# winforms timer

我想在使用 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/

相关文章:

javascript - 了解 JavaScript 计时器线程问题

java - 精确一秒间隔的最佳计时器技术是什么?

c# - 使用 C# 抓取 HTTPS 屏幕

c# - 动态 LINQ OrderBy + 方法计数

c# - 向重载函数添加包装器

c# - 如何以编程方式选择 DataGridView 的第一行

c# - 在 .NET 中,如果将结构传递给带有接口(interface)参数的方法,它是否会包含值?

c# - WinForm 滚动查看器

c# - 在 Winform 中复制 LocalDB 给我一个 'File being used by another process'

android - ViewPager — 如何在每个页面上启动不同的计时器?