zoukankan      html  css  js  c++  java
  • .net中Timer的使用

    Timer在两个类中存在System.ThreadingSystem.Timers,这两天使用的是第一个。
    Timer定时器在.net中的线程池中运行。

    立即运行Timer

    Timer可以在创建的的时候立即运行

    private static void Main(string[] args)
    {
        string msg = "Hello";
        var t = new Timer(TimerCb, msg, 100, Timeout.Infinite);
    
        Thread.Sleep(1000);
    }
    
    private static void TimerCb(object state)
    {
        System.Console.Out.WriteLine(state);
    }
    

    Timer其中一个构造函数包含四个参数,在这个例子中

    • TimerCbTimerCallback类型的回调,指定Timer倒计时结束时,执行程序
      TimerCallback定义如下:
      public delegate void TimerCallback(object state);
      
    • msg:传入的参数,object类型,所以可以传入任何对象,调用时传入回调中
    • :第三个参数指定Timer在多长时间以后开始运行,单位是毫秒
    • Timeout.Infinite:第四个参数指定Timer运行的间隔,如果需要反复运行,这里可以指定一个毫秒数。设定为Infinite则只会运行一次

    先创建,后运行

    private static void Main(string[] args)
    {
        var t = new Timer(TimerCb);
        t.Change(100, 1000);
    
        Thread.Sleep(2000);
    }
    
    private static void TimerCb(object state)
    {
        System.Console.Out.WriteLine(state);
    }
    

    Timer构造函数可以仅仅接收一个TimerCallback类型的回调,之后通过(Timer.Change)方法,控制Timer运行。
    在这个李自立,Timer被指定在100毫秒后运行,每1000毫秒(1秒)运行一次。

    值得注意的是,在这种方式中,Timer中的参数state会被传入该Timer对象本身。

    回调传入多个参数

    借助lambda表达式的匿名函数,可以简单的实现传入多个参数的Timer回调:

    private static void Main(string[] args)
    {
        string msg1 = "Hello";
        string msg2 = " World!";
        var t = new Timer((state) =>
        {
            TimerCb(msg1, msg2);
        });
        t.Change(100, 1000);
    
        Thread.Sleep(2000);
    }
    
    private static void TimerCb(string msg1, string msg2)
    {
        System.Console.Out.WriteLine(msg1 + msg2);
    }
    

    Timer创建时的回调,实际是套了一层壳,将变量传入了真正的回调TimerCb中调用。

  • 相关阅读:
    someThink
    快捷键
    typedef 的本质
    读取配置文件
    stl file
    摘自CSDNhttp://blog.csdn.net/gnuhpc/archive/2009/11/13/4808405.aspx
    thread demo
    B/S和C/S区别 java程序员
    上传文件 java程序员
    (八)VS的操作和使用技巧 java程序员
  • 原文地址:https://www.cnblogs.com/mosakashaka/p/12608181.html
Copyright © 2011-2022 走看看