Code for executing method every day at specific time C# (Windows Service) failed

c#, timer, windows-services

Solution

GC will collect your `timer` since you don't have any references to it after `OnStart` method.

You're just having it as a local variable. I hope you know local variables are eligible for garbage collection once JIT says that they are no longer used in code.

Fix: Just store the `timer` in a instance variabe, you're done.

private System.Threading.Timer my5AmTimer = null;

protected override void OnStart(string[] args)
{
    //All other code..

   this.my5AmTimer = new System.Threading.Timer(callback, null, next5am - DateTime.Now, TimeSpan.FromHours(24));
}

Problem

I had this code to execute method of windows service every day at 5am: EDIT: ``` MyService ws = new MyService (); protected override void OnStart(string[] args) { if (serviceHost != null) { serviceHost.Close(); } serviceHost = new ServiceHost(typeof(MyService)); serviceHost.Open(); double TimeOfExecution = 5; DateTime now = DateTime.Now; DateTime today5am = now.Date.AddHours(TimeOfExecution); DateTime next5am = now <= today5am ? today5am : today5am.AddDays(1); System.Threading.TimerCallback callback = new System.Threading.TimerCallback(ws.MethodToExecute()); var timer1 = new System.Threading.Timer(callback, null, next5am - DateTime.Now, TimeSpan.FromHours(24)); } ``` I expected the Service to execute at next 5 o'clock, and every 24 hours after that. Method `MethodToExecute()` did get executed at 5 o'clock (or some other specified time) that day, but next day it failed to execute. Also, it seems that it does not matter if I executed it or not for the first time, but it seems like service goes to sleep after some time and doesn't execute, so if 5 o'clock arrives not at current day, but next day, it will fail to execute. Does anyone have an idea what could be wrong?

Original source