Событие, прошедшее по таймеру, не затрагивающее целевой метод - PullRequest
0 голосов
/ 12 марта 2020

Я разрабатываю сервис 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);
    }      
}   

1 Ответ

1 голос
/ 12 марта 2020

Ваш таймер может быть собран сборщиком мусора, потому что вы не сохраняете ссылку на него.

Вы должны хранить его в поле:

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..");
}
...