首页 > Windows开发 > 详细

C#一直运行后台的代码

时间:2021-07-21 09:39:38      阅读:16      评论:0      收藏:0      [点我收藏+]

在C#中如果想要执行一段一直运行的程序,如监听网络状态,实时读取PLC数据,遇到这种情况有多种解决方法。

方法一,可以起一个Task任务,在Task任务中写个死循环,这种死循环最好在最后写个 Thread.Sleep,不然程序会占用很高的CPU。

 

 Task.Factory.StartNew(() =>
            {
                while (true)
                {
                    #region 一直运行的代码

                    Console.WriteLine("一直运行的代码");
                    Thread.Sleep(10);
                    #endregion
                }
            },TaskCreationOptions.LongRunning);

方法二

通过继承BackgroundService接口,实现它的ExecuteAsync方法来达到这种效果

public class Worker : BackgroundService
    {
        private readonly ILogger<Worker> _logger;

        public Worker(ILogger<Worker> logger)
        {
            _logger = logger; 
        }

        protected override async Task ExecuteAsync(CancellationToken stoppingToken)
        {
            while (!stoppingToken.IsCancellationRequested)
            {
                _logger.LogInformation("Worker running at: {time}", DateTimeOffset.Now);
                await Task.Delay(1000, stoppingToken);
            }
        }
    }

在Vs2019中已经有这个新建项目模块了,可以快速帮我们搭建好项目。

技术分享图片

 

 

方法三 System.Timers.Timer

 

//定义Timer
System.Timers.Timer Timers_Timer = new System.Timers.Timer();
//手动设置Timer,开始执行
Timers_Timer.Interval = 20;
Timers_Timer.Enabled = true;
// AutoReset属性决定计时器是不是要发起一次事件然后停止,还是进入开始/等待的循环。
 Timers_Timer.AutoReset = true;
Timers_Timer.Elapsed += new System.Timers.ElapsedEventHandler(Timers_Timer_Elapsed); 
//一直运行的循环
void Timers_Timer_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
{ 

Thread.Sleep(1000);
}

 

C#一直运行后台的代码

原文:https://www.cnblogs.com/topsyuan/p/15037386.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!