如何让我的Windows服务以特定间隔运行?

时间:2012-07-16 08:50:34

标签: c# windows windows-services

我想写一个Windows服务。但它需要在特定时间运行。例如,我的服务应该每隔5分钟给我发电子邮件。

private Timer _timer;
private DateTime _lastRun = DateTime.Now;

protected override void OnStart(string[] args)
{
    _timer = new Timer(10 * 60 * 1000); // every 10 minutes
    _timer.Elapsed += new System.Timers.ElapsedEventHandler(timer_Elapsed);
    //...
}


private void timer_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
{
    // ignore the time, just compare the date
    if (_lastRun.Date < DateTime.Now.Date)
    {
        // stop the timer while we are running the cleanup task
        _timer.Stop();
        //
        // do cleanup stuff
        //
        _lastRun = DateTime.Now;
        _timer.Start();
    }
}

我希望我的服务每隔5分钟给我发电子邮件。

8 个答案:

答案 0 :(得分:5)

我已经看到另一个问题,其中讨论了windows service vs scheduled task this。所以你可能想要看一下除此之外的两个类似的问题可能会有所帮助:

这里也有一些很棒的链接:

答案 1 :(得分:2)

查看Quartz.NET或搜索&#34; Windows任务计划&#34;。

第一种方法是程序化的,后一种方法是配置。

答案 2 :(得分:1)

为什么不在您配置的时间间隔内为您的服务添加一个计时器?

答案 3 :(得分:1)

本文提供了如何创建Windows服务http://msdn.microsoft.com/en-us/library/zt39148a(v=vs.80).aspx

的演练

要在特定时间运行它,您可以设置计划作业

答案 4 :(得分:1)

您可能希望在服务中使用Quartz.net之类的内容。然后,您可以使用cron表达式来安排服务中的“作业”。

答案 5 :(得分:1)

您的代码看起来不错,但是您在OnStart期间首先调用了timer.start()吗?

答案 6 :(得分:1)

如果您需要对计时器进行操作,那么您有两个选择

  1. 创建Windows服务并实施某种调度。这可能很复杂,所以要做好准备,以便花费大量时间来解决已经解决的问题。
  2. 您可以设置计划任务,而不是调用您的应用程序。
  3. 这完全取决于你真正需要多少控制权。

答案 7 :(得分:0)

对于上述功能,您可以将控制台应用程序与Windows调度程序结合使用。

安排你的exe每隔5分钟执行一次。你的exe会给你发电子邮件并停止。你想通过Windows服务实现什么特定的东西吗?