计时器.第一次运行函数的时间间隔
本文关键字:时间 函数 第一次 运行 计时器 | 更新日期: 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);