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);
    }
  • 相关阅读:
    刚才遇到了关于C#使用外部DLL函数上的char*的问题。
    重新整理过的 《C#编码规范》
    晕,完全晕了。
    Microsoft Visual Studio 2010 支持html5和css3的补丁包
    [mysql] 修改root密码和查看连接数
    Visual Studio统计有效代码行数
    [c#] 邮件附件为中文名的bug
    游戏名词解释
    [SVN] 以下后缀文件不应该提交入库
    [c#] 语言新特性
  • 原文地址:https://www.cnblogs.com/topsyuan/p/15037386.html
Copyright © 2011-2022 走看看