我已经创建了一个Windows服务,我需要在其中每天执行任务。为此,我使用了Timer
控件。
Timer tm = new Timer();
tm.Elapsed += new ElapsedEventHandler(OnElapsedTime);
tm.Interval = 86400000;
但这里的问题是,在我启动服务后,我必须等待整整1天才能真正调用该函数。
那么,有没有一种方法,在我启动服务的时候,函数就会被调用,而不必等到间隔时间结束?
提前谢谢。
发布于 2013-06-01 06:27:04
您可以先运行该方法,然后启动计时器。因此,它将进行第一次运行,计时器将在第二天再次运行。
或者创建简单的控制台应用程序来完成此任务。只需使用windows计划任务,您就可以每天运行此exe
另一种选择是在启动计时器后立即调用事件
发布于 2013-06-01 07:02:48
有两种方法可以做到这一点。
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);
https://stackoverflow.com/questions/16869772
复制