Vis*_*har 5 .net c# windows-services timer intervals
我创建了一个Windows服务,每天需要在其中执行任务。因此,要完成我已经使用的Timer控制。
Timer tm = new Timer();
tm.Elapsed += new ElapsedEventHandler(OnElapsedTime);
tm.Interval = 86400000;
Run Code Online (Sandbox Code Playgroud)
但是这里的问题是,启动服务后,我必须等待一整天才能真正调用该函数。
因此,有没有一种方法可以在我启动服务时一次调用该函数,而不必等到间隔时间结束?
提前致谢。
有两种方法可以做到。
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();
}
Run Code Online (Sandbox Code Playgroud)
2)您可以改用System.Threading.Timer该类。你可以这样使用它:
System.Threading.Timer tm =
new System.Threading.Timer(OnElapsedTime, null, 0, 86400000);
Run Code Online (Sandbox Code Playgroud)
但请注意,它们System.Threading.Timer在单独的线程上运行。因此,任何UI elements从该线程更新 的尝试都会导致错误。您应该通过Dispatcher或其他方式将 UI 元素更新(如果有)委托给 UI 线程。
更新:如果您想在服务启动后几分钟启动,您可以提供几分钟的延迟:
System.Threading.Timer tm =
new System.Threading.Timer(OnElapsedTime, null, 120, 86400000);
Run Code Online (Sandbox Code Playgroud)
您可以第一次运行该方法,然后启动计时器。因此,它将首先运行,并且计时器将在第二天再次运行。
或创建简单的控制台应用程序来执行任务。只需使用Windows计划任务即可exe每天运行一次
另一种选择是在启动计时器后立即调用事件
| 归档时间: |
|
| 查看次数: |
7112 次 |
| 最近记录: |