C#-Windows Service中的多个计时器

斯蒂芬(Stephane)

我刚刚开始开发Windows服务。但是我不确定我是否可以在Onstart()方法中使用多个计时器

private System.Timers.Timer timer1;
private System.Timers.Timer timer2;


        protected override void OnStart(string[] args)
        {
            this.timer1 = new System.Timers.Timer(30000);  // every 30 seconds
            this.timer1.AutoReset = true;
            this.timer1.Elapsed += new System.Timers.ElapsedEventHandler(fonction1);
            this.timer1.Start();
          
          
          this.timer2 = new System.Timers.Timer(10 * 60 * 1000); // every 10 minutes
            this.timer2.AutoReset = true;
            this.timer2.Elapsed += new System.Timers.ElapsedEventHandler(fonction2);
            this.timer2.Start();
          
          
        }


       private void fonction1(object sender, System.Timers.ElapsedEventArgs e)
        {
            bla bla
        }

       private void fonction2(object sender, System.Timers.ElapsedEventArgs e)
        {
            bla bla
        }

fonction1并同时fonction2运行,但它们的运行间隔不同。他们随后的开始时间不需要同步。在这种情况下,

  1. 我可以在OnStart()方法中使用2个计时器吗?
  2. 如果是这样,fonction1通常每30秒运行一次的设备是否必须等待fonction2下一次启动的结束

我需要在同一Windows服务中以不同的间隔运行这两种方法。

雅罗斯拉夫·韦雷缅科

我不明白为什么不这样做。System.Timers.Timer在单独的线程中引发事件,ThreadPool因此它们彼此独立。您唯一需要确保回调中的代码执行时间不会长于的时间Interval如果您认为这可能发生,则需要在事件处理程序中停止计时器并最后重新创建它。

private System.Timers.Timer timer1;

protected override void OnStart(string[] args)
{
    this.timer1 = new System.Timers.Timer(30000) { AutoReset = false };
    this.timer1.Elapsed += new System.Timers.ElapsedEventHandler(timer1_Elapsed);
    this.timer1.Start(); 
}

private void timer1_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
{
    try 
    {
        // Do Work
    }
    catch (Exception ex) 
    {
        // Logging
    }
    finally 
    {
        timer1.Start()
    }
}

如果SynchronizingObject属性为null,则在ThreadPool线程上引发Elapsed事件。如果对Elapsed事件的处理持续时间长于Interval,则该事件可能在另一个ThreadPool线程上再次引发。在这种情况下,事件处理程序应该是可重入的。

https://msdn.microsoft.com/zh-CN/library/system.timers.timer(v=vs.110).aspx

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在计时器(System.Windows.Forms.Timer)中递增计数器C#

来自分类Dev

C#Windows窗体中的计时器控件

来自分类Dev

如何使用C#在通用Windows应用程序中包含计时器

来自分类Dev

C#Windows Service计时器计时超过一个

来自分类Dev

计时器和 Windows 服务 c#

来自分类Dev

C#中的延迟计时器

来自分类Dev

使用C#将XAML设置为Windows Phone 8 App的计时器

来自分类Dev

C#:同时执行多个计时器

来自分类Dev

使用for循环C#添加多个计时器

来自分类Dev

Unity:使用多个计时器C#

来自分类Dev

Windows服务中的计时器队列

来自分类Dev

Windows Phone中的计时器

来自分类Dev

倒数计时器停止计数C#Windows Phone

来自分类Dev

刷新计时器c#Windows窗体

来自分类Dev

C语言中的多个计时器

来自分类Dev

多个计时器Objective-C

来自分类Dev

使用System的简单示例。计时器。C#中的计时器

来自分类Dev

计时器未在C#中重置

来自分类Dev

C#在文本框中显示计时器

来自分类Dev

新线程中的C#计时器

来自分类Dev

无法在C#中停止计时器

来自分类Dev

C#中的毫秒精确计时器

来自分类Dev

计时器未在C#中重置

来自分类Dev

EventWaitHandle。阻塞。在C#中设置唤醒计时器

来自分类Dev

如何停止在C#类中运行的计时器

来自分类Dev

标签在C#中的计时器

来自分类Dev

C#中的计时器无法正常工作

来自分类Dev

C#中的10分钟计时器

来自分类Dev

c#检测表单中的计时器