Timer 类: 
    设置一个定时器,定时执行用户指定的函数。定时器启动后,系统将自动建立一个新的线程,执行用户指定的函数。

using System;
using System.Threading;
namespace ThreadExample
{
    class TimerExampleState
    {
        public int counter = 0;
        public Timer tmr;
    }
 
    class App
    {
        public static void Main()
        {
            TimerExampleState s = new TimerExampleState();
 
            // 创建代理对象 System.Threading.TimerCallback,该代理将被定时调用 
            TimerCallback timerDelegate = new TimerCallback(CheckStatus);
            
            // 创建一个时间间隔为 1s 的定时器 
            // 第1个参数:指定了 TimerCallback 委托,表示要执行的方法; 
            // 第2个参数:一个包含回调方法要使用的信息的对象,或者为空引用; 
            // 第3个参数:延迟时间--计时开始的时刻距现在的时间,单位是毫秒,指定为"0"表示 立即启动计时器; 
            // 第4个参数:定时器的时间间隔--计时开始后,每隔这么长的一段时间,TimerCallback 所代表的方法将被调用一次 
            Timer timer = new Timer(timerDelegate, s, 1000, 1000);
            s.tmr = timer;
            
            // 主线程停下来等待 Timer 对象的终止 
            while (s.tmr != null)
            {
                Thread.Sleep(0);
            }
            Console.WriteLine("Timer example done.");
            Console.ReadLine();
        }
 
        /// <summary>
        /// 下面是被定时调用的方法
        /// </summary>
        /// <param name="state"></param> 
        static void CheckStatus(Object state)
        {
            TimerExampleState s = (TimerExampleState)state;
            s.counter++;
            Console.WriteLine("{0} Checking Status {1}.", DateTime.Now.TimeOfDay, s.counter);
            if (s.counter == 5)
            {
                //使用 Change 方法改变了时间间隔为2秒,再等待10秒 
                (s.tmr).Change(10000, 2000);
                Console.WriteLine("changed");                
            }
            if (s.counter == 10)
            {
                Console.WriteLine("disposing of timer!");
                s.tmr.Dispose();
                s.tmr = null;
            }
        }
    }
}

程序首先创建了一个定时器,它将在创建 1 秒之后开始每隔 1 秒调用一次 CheckStatus() 方法。当调用 5 次以后,CheckStatus() 方法中修改了时间间隔为 2 秒,在并且指定在 10 秒后重新开始。当计数达到 10 次, 调用 Timer.Dispose()方法删除了 timer 对象,主线程于是跳出循环,终止程序。

C# 多线程详解 Part.03 (定时器)的更多相关文章

  1. iOS开发——多线程OC篇&多线程详解

    多线程详解 前面介绍了多线程的各种方式及其使用,这里补一点关于多线程的概念及相关技巧与使用,相信前面不懂的地方看了这里之后你就对多线程基本上没有什么问题了! 1——首先ios开发多线程中必须了解的概念 ...

  2. iOS开发——GCD多线程详解

    GCD多线程详解 1. 什么是GCD Grand Central Dispatch 简称(GCD)是苹果公司开发的技术,简单来说,GCD就是iOS一套解决多线程的机制,使用GCD能够最大限度简化多线程 ...

  3. Java 多线程详解(四)------生产者和消费者

    Java 多线程详解(一)------概念的引入:http://www.cnblogs.com/ysocean/p/6882988.html Java 多线程详解(二)------如何创建进程和线程: ...

  4. java中多线程详解-synchronized

    一.介绍 当多个线程涉及到共享数据的时候,就会设计到线程安全的问题.非线程安全其实会在多个线程对同一个对象中的实例变量进行并发访问时发生,产生的后果就是“脏读”.发生脏读,就是取到的数据已经被其他的线 ...

  5. python多线程详解

    目录 python多线程详解 一.线程介绍 什么是线程 为什么要使用多线程 二.线程实现 threading模块 自定义线程 守护线程 主线程等待子线程结束 多线程共享全局变量 互斥锁 递归锁 信号量 ...

  6. C#多线程详解(一) Thread.Join()的详解

    bicabo   C#多线程详解(一) Thread.Join()的详解 什么是进程?当一个程序开始运行时,它就是一个进程,进程包括运行中的程序和程序所使用到的内存和系统资源.而一个进程又是由多个线程 ...

  7. Java多线程详解(二)

    评论区留下邮箱可获得<Java多线程设计模式详解> 转载请指明来源 1)后台线程 后台线程是为其他线程服务的一种线程,像JVM的垃圾回收线程就是一种后台线程.后台线程总是等到非后台线程死亡 ...

  8. Delphi多线程详解

    (整理自网络) Delphi多线程处理 1-1多线程的基本概念 WIN 98/NT/2000/XP 是个多任务操作系统,也就是:一个进程可以划分为多个线程,每个线程轮流占用CPU 运行时间和资源,或者 ...

  9. C# 多线程详解

    1.使用多线程的几种方式 (1)不需要传递参数,也不需要返回参数 ThreadStart是一个委托,这个委托的定义为void ThreadStart(),没有参数与返回值. 复制代码 代码如下: cl ...

随机推荐

  1. 基于Spark ALS构建商品推荐引擎

    基于Spark ALS构建商品推荐引擎   一般来讲,推荐引擎试图对用户与某类物品之间的联系建模,其想法是预测人们可能喜好的物品并通过探索物品之间的联系来辅助这个过程,让用户能更快速.更准确的获得所需 ...

  2. struts2 传递数组、List、Map

    struts2 传递数组.List.Map jsp文件 数组:     <s:textfield name="ages" value="a1">&l ...

  3. js自定义弹窗

    <一>confirm弹窗 页面操作中常见需要确认操作. 例如:删除某条消息前需要确认是否删除. 页面中弹窗确认操作用到confirm消息对话框. JS代码 function del(){ ...

  4. HTML5结合百度地图API创建地图应用

    具体的百度地图API的使用方法查看百度地图API里的DEMO <style> #div1{ width:400px; height:400px; border:1px #000 solid ...

  5. Ajax 完整教程 (转)

    http://www.cnblogs.com/Garden-blog/archive/2011/03/11/1981778.html

  6. STM8s窗口看门狗

    看看窗口看门狗的框图 从图里看出产生复位信号有2个方式: 1 WDGCR寄存器的T6 由1变0,也就是从此寄存器的值从0x40变成0x3F会产生复位信号: 2 当寄存器WDGCR的值大于WDGWR的时 ...

  7. 配置NGReport 报告中文

    1. 测试报告的名称 在测试开始或测试监听器的类中加上下面一句代码即可: System.setProperty("org.uncommons.reportng.title", &q ...

  8. 开源HTML5 Canvas游戏Runtime发布

    Cantk-Runtime是通用的HTML5 Canvas 2D游戏引擎运行库,让HTML5游戏的性能飞起来.Cantk-Runtime以PhoneGap插件的方式提供,从此结束PhoneGap低性能 ...

  9. html5中的表单

    <form id="aForm" action="reg.php"> <p>请填写表单内容以完成注册!</p> <fi ...

  10. AndroidManifest.xml清单文件要点

    AndroidManifest.xml AndroidManifest.xml清单文件通常包括如下内容: 应用程序的包名,该包名作为该应用的唯一标识. 应用包含的组件,如Activity,Servic ...