繁体   English   中英

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

[英]How can I get my windows service to run at a specific interval?

我想写一个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分钟给我发电子邮件。

嗯,我已经看到了另外一个问题,其中讨论了Windows服务VS计划任务这样 所以你可能想要看一下除此之外的2个类似的问题可能会有所帮助:

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

看看Quartz.NET或搜索“Windows任务调度”。

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

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

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

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

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

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

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

  1. 创建Windows服务并实现某种调度。 这可能很复杂,因此要做好准备,以便花费大量时间来解决已经解决的问题。
  2. 您可以设置计划任务,而不是调用您的应用程序。

这一切都取决于你真正需要多少控制。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM