zoukankan      html  css  js  c++  java
  • Timer定时器

       Timer是一个经常使用的东西,它有3种类型的Timer。分别是:

      1.定义在System.Windows.Forms里;

      2.定义在System.Threading.Timer类里;

      3.定义在System.Timers.Timer类里;

      ◆System.Windows.Forms.Timer

      应用于WinForm中的,它是通过Windows消息机制实现的,类似于VB或Delphi中的Timer控件,内部使用API  SetTimer实现的。它的主要缺点是计时不精确,而且必须有消息循环,Console  Application(控制台应用程序)无法使用。   
      
      ◆System.Timers.Timer

      和System.Threading.Timer非常类似,它们是通过.NET  Thread  Pool实现的,轻量,计时精确,对应用程序、消息没有特别的要求。

      ◆System.Timers.Timer还可以应用于WinForm,完全取代上面的Timer控件。它们的缺点是不支持直接的拖放,需要手工编码。

    一、属性

      AutoReset   获取或设置一个值,该值指示 Timer 是应在每次指定的间隔结束时引发 Elapsed 事件,还是仅在指定的间隔第一次结束后引发该事件。
      Container    获取 IContainer,它包含 Component。 (继承自 Component。)
      Enabled     获取或设置一个值,该值指示 Timer 是否应引发 Elapsed 事件。
      Interval     获取或设置引发 Elapsed 事件的间隔。
      Site        基础结构。获取或设置在设计模式中将 Timer 绑定到其容器的站点。 (重写 Component.Site。)
      SynchronizingObject   获取或设置对象,该对象用于在间隔过后封送发出的事件处理程序调用。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    public class Program
    {
        static void Main(string[] args)
        {
            //下面来看看默认值
            Timer t = new Timer();
            Console.WriteLine(t.AutoReset); //True 设置是执行一次(false)还是一直执行(true);
            Console.WriteLine(t.Container);
            Console.WriteLine(t.Enabled);   //False 到达时间的时候是否执行Elapsed事件;
            Console.WriteLine(t.Interval);  //100 当执行完一次后,隔多长时间才执行第二次
            Console.WriteLine(t.Site);      //获取或设置在设计模式中将 Timer 绑定到其容器的站点。
            Console.WriteLine(t.SynchronizingObject);   //获取或设置对象,该对象用于在间隔过后封送发出的事件处理程序调用。
            }   
    }

      下面给出一个每隔一段时间, 执行一次任务的实例:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    public class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("ss");
            Timer t = new Timer(2000);
            t.Enabled = true;       //到达时间就执行一次,或者是持续执行
            t.AutoReset = true;     //一直执行
            //t.Elapsed += MyHandler;
             
            //Lambda表达式的方式调用
            //t.Elapsed += (sender, e) =>
            //    {
            //        Console.WriteLine("你好");
            //    };
     
            Console.ReadKey();
        }
     
        public static void MyHandler(object sender, ElapsedEventArgs e)
        {
            Console.WriteLine("你好");
            //File.AppendAllText(@"D:123.txt","你好",Encoding.Default);
        }
    }

    二、方法

      BeginInit     开始用于窗体或由其他组件使用的 Timer 的运行时初始化。
      Close        释放由 Timer 占用的资源。
      CreateObjRef    创建一个对象,该对象包含生成用于与远程对象进行通信的代理所需的全部相关信息。 (继承自 MarshalByRefObject。)
      Dispose()     释放由 Component 使用的所有资源。 (继承自 Component。)
      EndInit       结束用于窗体上或由其他组件使用的 Timer 的运行时初始化。
      Equals(Object)   确定指定的 Object 是否等于当前的 Object。 (继承自 Object。)
      GetHashCode     用作特定类型的哈希函数。 (继承自 Object。)
      GetLifetimeService  检索控制此实例的生存期策略的当前生存期服务对象。 (继承自 MarshalByRefObject。)
      GetType       获取当前实例的 Type。 (继承自 Object。)
      InitializeLifetimeService   获取控制此实例的生存期策略的生存期服务对象。 (继承自 MarshalByRefObject。)
      Start     通过将 Enabled 设置为 true 开始引发 Elapsed 事件。
      Stop     通过将 Enabled 设置为 false 停止引发 Elapsed 事件。

  • 相关阅读:
    03 Java 修饰符
    04_Java 循环结构 for, while 及 do...while
    01_Java第一个程序_报错记录
    07_Java StringBuffer 和 StringBuilder 类_(修改,并且不产生新的未使用对象)
    06_Math 的 floor,round 和 ceil 方法实例比较_格式化字符串_String类
    [爱偷懒的程序员系列]Section 1. “懒”是一切需求的根源
    (1)Micropython+ESP32 点亮一个LED
    数据迁移测试方法【转】
    回来了回来了,失踪人口回归
    [爱偷懒的程序员系列]Section 4. 自定义钉钉消息推送
  • 原文地址:https://www.cnblogs.com/mingxuantongxue/p/3796605.html
Copyright © 2011-2022 走看看