zoukankan      html  css  js  c++  java
  • 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);
    }
  • 相关阅读:
    单词统计
    易学app开发——10
    易学app开发--9
    易学app开发——8
    易学app开发----7
    易学app开发----6
    易学app开发----5
    易学app开发----4
    易学app开发----3
    顶会热词统计
  • 原文地址:https://www.cnblogs.com/topsyuan/p/15037386.html
Copyright © 2011-2022 走看看