在c#中启动windows服务时调用方法

时间:2013-12-09 00:13:19

标签: c# windows-services

请看这段代码

 public partial class TestService : ServiceBase
 {
     private static System.Timers.Timer aTimer;

     protected override void OnStart(string[] args)
     {
        aTimer = new Timer(10000 * 6 * 5); //  5 minutes interval
        aTimer.Elapsed += new ElapsedEventHandler(OnTimedEvent);
        aTimer.Enabled = true;
     }

     private void OnTimedEvent(object source, ElapsedEventArgs e)
     {
      ......
     }
 }

当我在下午4:00开始这项服务时,第一次调用OnTimedEvent是在下午4:05,然后是下午4:10,依此类推。我希望一旦启动服务就在下午4点调用OnTimedEvent。这里有什么我想念的吗?

3 个答案:

答案 0 :(得分:0)

您可以在OnStart中调用该事件

OnTimedEvent(this, null)

答案 1 :(得分:0)

使用System.Threading.Timer而不是System.Timers.Timer

它有一个constructor重载,除了指定间隔允许你选择启动延迟,可以设置为0立即触发。

有关计时器类的比较,请参阅Windows.Forms.Timer OR System.Threading.Timer(特别是“初始计时器事件可调度?”)

答案 2 :(得分:0)

System.Timers.Timer从5分钟开始倒计时,然后触发事件。因此,在计时器达到0之前,它将无法触发和运行代码。

代码可以在启用事件监听器之前运行,如下所示:

public partial class TestService : ServiceBase
 {
     private static System.Timers.Timer aTimer;

     protected override void OnStart(string[] args)
     {
        aTimer = new Timer(10000 * 6 * 5); //  5 minutes interval
        aTimer.Elapsed += new ElapsedEventHandler(OnTimedEvent);
        
        foo();
        aTimer.Enabled = true;
     }

     private void OnTimedEvent(object source, ElapsedEventArgs e)
     {
       foo();
     }

     private void foo(){
        .....
     }
 }