【问题标题】:How to set an automatic restarting of a Windows Service application, C#?如何设置 Windows 服务应用程序的自动重启,C#?
【发布时间】:2011-08-21 19:10:23
【问题描述】:

我需要创建一些 Windows 服务,它会每隔一段时间,每隔一小时执行一次。问题是 - 我应该使用哪个计时器控件:System.Timers.Timer 还是 System.Threading.Timer 之一?我之所以问,是因为我一直在阅读论坛,并且对两者都有一些不同的评论。此外,由于我对编程很陌生,因此解释有点难以理解。谢谢。

【问题讨论】:

  • 请注意,您实际上可能希望使用计划任务而不是使用服务来执行定期重复的任务。

标签: c# windows-services restart


【解决方案1】:

阅读@Jon Skeet 的计时器文章:http://www.yoda.arachsys.com/csharp/threads/timers.shtml

【讨论】:

    【解决方案2】:

    我在我的 Windows 服务中使用 System.Timers.Timer。它很容易控制和连接。 VS 2010 的 Intellisense 甚至会在您键入“myTimer.Elapsed += ...”时创建经过的事件处理程序

    如果您不希望在事件处理程序完成长时间运行的处理之前触发计时器,您也可以在事件处理程序开始时停止计时器并在结束时重新启动它。例如:

    System.Timers.Timer myTimer;
    void Main()
    {
        myTimer = new System.Timers.Timer(1000);
        myTimer.Elapsed += new System.Timers.ElapsedEventHandler(myTimer_Elapsed);
        myTimer.Start();
    }
    
    void myTimer_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
    {
        myTimer.Stop();
        // process event
        myTimer.Start();
    }
    

    【讨论】:

    • 你能逐步等待这段代码在做什么吗?我相信我理解它,但我并不完全确定。这是否说明每一秒都在“//处理事件”所在的位置放置什么功能/代码?谢谢。
    • @Dante - myTimer 将在 myTimer.Start() 之后一秒调用 myTimer_Elapsed。一旦进入 myTimer_Elapsed,myTimer 就会停止,你的处理代码会被执行(无论你想要在定时器触发时发生什么),然后 myTimer 会重新启动。如果您的处理在下一个间隔发生之前完成,则您不必在每次处理经过的事件时停止和启动每个计时器。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-06
    • 1970-01-01
    • 2011-05-22
    • 1970-01-01
    • 1970-01-01
    • 2010-10-14
    相关资源
    最近更新 更多