zoukankan      html  css  js  c++  java
  • Timer优化实例

    一个简单的Timer计时器,设置到达时间隔时启动一次Timer(每次只执行一次),更加节省资源...

    1.首先新建一个控制台应用程序;

    2.在Program.cs里面添加如下代码:

    Program Code
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading;

    namespace Timer_TEST
    {
    class Program
    {
    private System.Timers.Timer _timer;

    /// <summary>
    /// 下次统计时间
    /// </summary>
    DateTime _nextTime = Convert.ToDateTime(DateTime.Now.AddMinutes(1).ToString("yyyy-MM-dd HH:mm:ss"));

    /// <summary>
    /// 获取下次执行
    /// </summary>
    /// <param name="args"></param>
    double GetInterval()
    {
    double interval = Timeout.Infinite;

    try
    {
    TimeSpan ts = _nextTime.Subtract(DateTime.Now);
    interval = ts.Duration().TotalMilliseconds;
    Console.WriteLine(string.Format("{0}秒后执行",(interval/1000).ToString()));
    }
    catch (Exception ex)
    {
    Console.WriteLine("获取下次执行报表服务的时间间隔失败,错误信息:", ex);
    }
    return interval;
    }

    /// <summary>
    /// 启动定时器
    /// </summary>
    /// <param name="args"></param>
    public void Start()
    {
    try
    {
    _timer = new System.Timers.Timer();
    _timer.Enabled = true;
    _timer.Interval = GetInterval();
    _timer.AutoReset = false;//false为每次定时器只在间隔时间到达之后执行一次;true为定时器间隔时间到达后连续执行
    _timer.Elapsed += new System.Timers.ElapsedEventHandler(ShowTime);//设定定时器执行时间
    _timer.Start();
    Program p = new Program();
    p.ShowTime();

    }
    catch (Exception ex)
    {
    Console.WriteLine("定时器启动失败,失败信息:",ex);
    }
    }

    private void ShowTime(object sender, System.Timers.ElapsedEventArgs e)
    {
    ShowTime();
    //重新set定时器
    _timer.Interval = GetInterval();
    _timer.Start();
    }
    private void ShowTime()
    {
    //DateTime dt = Convert.ToDateTime(DateTime.Now.ToString("yyyy-mm-dd hh:mm:ss"));
    Console.WriteLine("现在时间是:" + DateTime.Now);
    _nextTime = _nextTime.AddMinutes(1);
    }

    static void Main(string[] args)
    {
    Program p = new Program();
    p.Start();
    Console.ReadLine();
    }
    }
    }


     

  • 相关阅读:
    CLR via C#(11)-无参属性、索引器
    CLR via C#(10)-参数
    C#委托的介绍(delegate、Action、Func、predicate)
    MVC3使用Unity实现接口自动注册
    CLR via C#(09)-扩展方法
    CLR via C#(08)-操作符
    CLR via C#(07)-静态类,分部类
    CLR via C#(06)- 构造器
    VS2010几款超赞的扩展辅助工具总结
    web前端开发随手笔记
  • 原文地址:https://www.cnblogs.com/captainR/p/2318209.html
Copyright © 2011-2022 走看看