How to have a loop in a Windows service without using the Timer

前端 未结 5 899
清歌不尽
清歌不尽 2020-11-29 01:29

I want to call a Business layer method from a Windows service (done using C# and .NET) after every 10 seconds. However, i dont want to use the Timer_Elapsed event since it s

5条回答
  •  夕颜
    夕颜 (楼主)
    2020-11-29 02:04

    There's another way to get timed execution, the WaitHandle.WaitOne() method provides a timeout argument. That works very nicely in a service as it lets you implement the need to stop the service and periodic execution in a single method call. The template looks like this:

        Thread Worker;
        AutoResetEvent StopRequest = new AutoResetEvent(false);
    
        protected override void OnStart(string[] args) {
            // Start the worker thread
            Worker = new Thread(DoWork);
            Worker.Start();
        }
        protected override void OnStop() {
            // Signal worker to stop and wait until it does
            StopRequest.Set();
            Worker.Join();
        }
        private void DoWork(object arg) {
            // Worker thread loop
            for (;;) {
                // Run this code once every 10 seconds or stop right away if the service 
                // is stopped
                if (StopRequest.WaitOne(10000)) return;
                // Do work...
                //...
            }
        }
    

提交回复
热议问题