简体   繁体   中英

How to start method on timer from windows service?

I have a method that executes in about 10 minutes. And it goes well just by itself. I need to start this method every hour using windows service (this is obligatory). So I've written my service by some examples (just one invoke for start):

partial class ServiceWSDRun : ServiceBase
{
    protected override void OnStart(string[] args)
    {
        Thread t = new Thread(WebServiceDownload.MainProgram.Execute);
        t.Start();
    }
}

Now when I install it, it launches my method in a new thread but this thread seem to end with the OnStart() - it actually logs some info from the beginning of me method. Why does it stop and what should I do?

And I'm thinking in the end I should have something like this:

partial class ServiceWSDRun : ServiceBase
{
    System.Timers.Timer timer = null;

    protected override void OnStart(string[] args)
    {
        Thread t = new Thread(WebServiceDownload.MainProgram.Execute);
        t.Start();

        timer = new System.Timers.Timer();
        timer.Interval = 60 * 60 * 1000; // 1 hour
        timer.Elapsed += new System.Timers.ElapsedEventHandler(OnTimer);
        timer.Enabled = true;
    }

    public void OnTimer(object sender, System.Timers.ElapsedEventArgs args)
    {
        WebServiceDownload.MainProgram.Execute();
    }

    protected override void OnStop()
    {
        timer.Enabled = false;
    }
}

How do I make it work? And keep in mind that method takes ~10 mins to execute.

You should use System.Threading.Timer instead of System.Timers.Timer.

Here is the reference for this:

https://msdn.microsoft.com/en-us/library/system.threading.timer(v=vs.110).aspx

Also, another thread about the same topic:

System.Timers.Timer vs System.Threading.Timer

You should lock the execution, avoiding the second execution before the first one finishes.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM