经过计时器未达到目标方法

问题描述 投票:0回答:2

[我正在开发Windows服务,在OnStart()方法中,我使用Timer在特定时间间隔后按下timer1_Tick,但是timer1_Tick甚至没有调用一次。

这是我的代码

protected override void OnStart(string[] args)
{
    base.OnStart(args);
    var timer1 = new System.Timers.Timer();
    timer1.Interval = 30000; //every 30 secs
    timer1.Elapsed += new System.Timers.ElapsedEventHandler(timer1_Tick);
    timer1.Enabled = true;
    WriteToFile("Service has started..");
}

private void timer1_Tick(object sender, ElapsedEventArgs e)
{
    WriteToFile("Entered in GetFailedProductDetails...");
    //code  
}

寡妇服务Program.cs文件的起始代码

static class Program
{
    static void Main()
    {
        Service1 myService = new Service1();
        //myService.OnDebug();           
        ServiceBase[] ServicesToRun;
        ServicesToRun = new ServiceBase[]
        {
            new Service1()
        };
        ServiceBase.Run(ServicesToRun);
    }      
}   
c# .net timer windows-services
2个回答
0
投票

您需要在Start()上调用timer1才能启动System.Timers.Timer


0
投票

您的计时器可能被垃圾回收所收集,因为您没有对其进行引用。

您应该将其存储在字段中:

private System.Timers.Timer timer1;

protected override void OnStart(string[] args)
{
    base.OnStart(args);
    timer1 = new System.Timers.Timer();
    timer1.Interval = 30000; //every 30 secs
    timer1.Elapsed += new System.Timers.ElapsedEventHandler(timer1_Tick);
    timer1.Enabled = true;
    WriteToFile("Service has started..");
}
© www.soinside.com 2019 - 2024. All rights reserved.