C#一直运行后台的代码

在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);
}

 

posted @ 2021-07-20 22:24  袁浩178  阅读(2789)  评论(0编辑  收藏  举报