我创建了一个Windows服务,我需要每天执行任务。所以为了实现这一点,我使用了Timer
控件。
Timer tm = new Timer();
tm.Elapsed += new ElapsedEventHandler(OnElapsedTime);
tm.Interval = 86400000;
但问题是,在我启动服务后,我必须等待整整1天来实际调用该功能。
那么有没有一种方法可以在我启动服务时调用该函数,而不必等到间隔时间结束。
提前致谢。
答案 0 :(得分:5)
您可以首次运行该方法,然后启动计时器。所以它会进行第一次运行,计时器将在第二天再次运行。
或者创建简单的控制台应用程序来完成任务。只需使用Windows预定任务,您就可以每天运行exe
另一个选择是在启动计时器后立即调用事件
答案 1 :(得分:3)
有两种方法可以做到。
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);