C# Windows服务中执行死循环

用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);
                Thread.Sleep(2000);
            }
        }

 

转载于:https://www.cnblogs.com/HansZimmer/p/11262079.html

你可以使用C#编写一个Windows服务来定时执行任务。下面是一个简单的示例: 首先,创建一个新的C#项目,并选择“Windows服务”模板。 然后,在你的服务,你可以使用`System.Timers.Timer`类来执行定时任务。在服务的`OnStart`方法初始化定时器,并设置间隔时间和要执行的方法。在`OnStop`方法停止定时器。 这是一个基本的示例代码: ```csharp using System; using System.ServiceProcess; using System.Timers; namespace YourNamespace { public partial class YourService : ServiceBase { private Timer timer; public YourService() { InitializeComponent(); } protected override void OnStart(string[] args) { timer = new Timer(); timer.Interval = 60000; // 1 minute in milliseconds timer.Elapsed += TimerElapsed; timer.Start(); } protected override void OnStop() { timer.Stop(); timer.Dispose(); } private void TimerElapsed(object sender, ElapsedEventArgs e) { // 执行你的定时任务 } } } ``` 请注意,上面的代码将每隔1分钟执行一次`TimerElapsed`方法。你可以根据需要更改间隔时间。 一旦你完成了代码编写,你可以将你的项目编译为一个可执行文件,然后使用`installutil`命令行工具来安装和启动服务。例如,打开命令提示符,导航到你的可执行文件所在的文件夹,并运行以下命令: ``` installutil YourService.exe ``` 这将安装你的服务,并可以使用服务管理器启动、停止和管理它。 希望这可以帮助到你开始编写一个定时执行Windows服务!如有任何问题,欢迎继续提问。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值