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