码迷,mamicode.com
首页 > Windows程序 > 详细

C# Windows Service中执行死循环轮询

时间:2015-12-24 23:51:06      阅读:776      评论:0      收藏:0      [点我收藏+]

标签:

用C#编写Windows Service时,执行轮询一般有两种方式,一种是用Timer,System.Timers或者是System.Thread下的,这种执行是按时间循环执行,缺点是也许上个执行还没有完成,又开始执行新的。

另一种方式是利用线程,在OnStart里单开一个线程去跑含有死循环结构的函数,这种方式的缺点是,对线程的控制困难,停止服务了,线程还有可能在执行,不过 .Net 4.0+ 给我们提供了 CancellationTokenSource,用来取消正在运行的线程(Task),代码:

CancellationTokenSource cancelTokenSource = new CancellationTokenSource();

        protected override void OnStart(string[] args)
        {
            Logger.Instance.WriteLine("{0} is start.", base.ServiceName);
            Task.Factory.StartNew(DoWork, cancelTokenSource.Token);
        }

        protected override void OnStop()
        {
            cancelTokenSource.Cancel();
            cancelTokenSource.Dispose();
            Logger.Instance.WriteLine("{0} is stop.", base.ServiceName);
        }

        private void DoWork(object arg)
        {
            while (!cancelTokenSource.IsCancellationRequested)  // Worker thread loop
            {
                Logger.Instance.WriteLine("{0:yyyy-MM-dd HH:mm:ss}", DateTime.Now);
                System.Threading.Thread.Sleep(2000);
            }
        }

 

C# Windows Service中执行死循环轮询

标签:

原文地址:http://www.cnblogs.com/felixnet/p/5074642.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!