计时器.第一次运行函数的时间间隔

本文关键字:时间 函数 第一次 运行 计时器 | 更新日期: 2023-09-27 18:16:16

我已经创建了一个我需要每天执行任务的Windows服务。因此,为了实现这一点,我使用了Timer控件。

Timer tm = new Timer();
tm.Elapsed += new ElapsedEventHandler(OnElapsedTime);
tm.Interval = 86400000;

但这里的问题是,在我启动服务后,我必须等待整整一天才能真正调用该函数。

那么是否有一种方法可以让函数在我启动服务的时候被调用,而不必等到间隔时间结束?

计时器.第一次运行函数的时间间隔

可以先运行方法,然后再启动计时器。所以它会做第一次运行,计时器会在第二天再次运行。

或创建简单的控制台应用程序来执行任务。只需使用windows计划任务,您就可以每天运行此exe

另一个选项是在启动计时器后立即调用事件

如何启动定时器。立即发生的事件

有两种方法。

1)在OnElapsedTime中存在的代码,将其放在另一个方法中,并在启动计时器后立即调用该方法。例如,将代码放在TimerCalled方法中,然后使用:

static void Main(string[] args)
{
    Timer tm = new Timer();
    tm.Elapsed += new ElapsedEventHandler(OnElapsedTime);
    tm.Interval = 86400000;
    TimerCalled();
}
private static void OnElapsedTime(object source, ElapsedEventArgs e)
{
    TimerCalled();
}

2)你可以使用System.Threading.Timer类代替。你可以这样使用:

System.Threading.Timer tm = 
    new System.Threading.Timer(OnElapsedTime, null, 0, 86400000);

但是要注意System.Threading.Timer运行在一个单独的线程上。因此,任何从该线程更新UI elements的尝试都会导致错误。你应该通过Dispatcher或其他方式将UI元素更新委托给UI线程。

更新:如果您希望在服务启动几分钟后启动,您可以提供几分钟的延迟:

System.Threading.Timer tm = 
    new System.Threading.Timer(OnElapsedTime, null, 120, 86400000);