3

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

4

8 回答 8

5

好吧,我也看到了另一个讨论Windows 服务与计划任务问题。因此,您可能想看看除此之外的 2 个类似问题,这可能会有所帮助:

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

于 2012-07-16T08:56:25.243 回答
2

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

第一种方法是编程的,后者是配置的。

于 2012-07-16T08:56:25.307 回答
1

为什么不向您的服务添加一个计时器,该计时器在您配置的时间间隔内执行您想要的操作?

于 2012-07-16T08:54:11.257 回答
1

这篇文章给出了如何创建 windows 服务http://msdn.microsoft.com/en-us/library/zt39148a(v=vs.80).aspx

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

于 2012-07-16T08:55:09.360 回答
1

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

于 2012-07-16T08:56:13.523 回答
1

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

于 2012-07-16T08:56:19.723 回答
1

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

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

这完全取决于您真正需要多少控制。

于 2012-07-16T08:56:43.157 回答
0

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

安排您的 exe 每 5 分钟执行一次。您的 exe 会向您发送电子邮件并停止。您想通过 Windows 服务实现什么特定的目标?

于 2012-07-16T10:55:09.590 回答