2012-07-16 69 views
3

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

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

+0

我不认为这是足够的信息是诚实的。真的很难提供任何有用的代码。 [试试这个](http://stackoverflow.com/questions/503564/how-might-i-schedule-ac-sharp-windows-service-to-perform-a-task-daily) – yoonsi 2012-07-16 08:53:33

+0

这个问题已被问到,在这里是链接。 您使用此System.Threading.Timer这是成功的关键 http://stackoverflow.com/questions/246697/windows-service-and-timer – IamStalker 2012-07-16 08:55:43

+0

我想给我发邮件,ı编辑我的问题 – 2012-07-16 08:55:52

回答

5

那么我已经看到另一个问题,讨论windows service vs scheduled taskthis。所以,你可能想看看那个以外这里是2个,它可能会帮助类似的问题:

这里也有一些伟大的链接:

+0

我编辑的问题是错的?我在哪里写'发送邮件代码'? – 2012-07-16 10:25:08

1

为什么不只是添加一个计时器到您的服务谁做你想要在你配置的时间间隔?

1

你可能想在你的服务使用类似Quartz.net运行它。然后,您可以使用cron表达式在您的服务中安排“作业”。

1

你的代码看起来不错,但你是否在OnStart期间首先打电话给timer.start()?

2

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

第一种方法是编程式,后面是配置。

1

如果你需要一个计时器做的操作,那么你有两个选择

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

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

0

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

安排你的exe每5分钟执行一次。你的exe会通过电子邮件发送给你有什么具体的你想通过Windows服务实现吗?