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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM