Chinaunix首页 | 论坛 | 博客
  • 博客访问: 12423
  • 博文数量: 1
  • 博客积分: 93
  • 博客等级: 民兵
  • 技术积分: 20
  • 用 户 组: 普通用户
  • 注册时间: 2010-06-07 20:01
文章分类

全部博文(1)

文章存档

2012年(1)

我的朋友
最近访客

分类: 嵌入式

2012-02-11 17:47:54

System.Threading.Timer .NET为指定时间间隔中执行一个方法提供的一种机制。

其中构造函数一个参数提供,提供方法的执行。

应用场景——用控制台模拟一个时钟:

  1. class Program
  2.     {
  3.        
  4.         static void Main(string[] args)
  5.         {
  6.             System.Threading.Timer timerClock;
  7.             timerClock = new System.Threading.Timer(new TimerCallback(timerCall), null, 0, 1000);
  8.             /*
  9.             //Timer构造函数参数说明:
  10.             Callback:一个 TimerCallback 委托,表示要执行的方法。
  11.             State:一个包含回调方法要使用的信息的对象,或者为空引用(Visual Basic 中为 Nothing)。
  12.             dueTime:调用 callback 之前延迟的时间量(以毫秒为单位)。指定 Timeout.Infinite 以防止计时器开始计时。指定零 (0) 以立即启动计时器。
  13.             Period:调用 callback 的时间间隔(以毫秒为单位)。指定 Timeout.Infinite 可以禁用定期终止。
  14.             */
  15.             Console.Read();
  16.         }
  17.         private static void timerCall(object obj)
  18.         {
  19.             
  20.             Console.WriteLine(DateTime.Now.ToString());

  21.             System.Threading.Thread.Sleep(1000);

  22.             Console.Clear();

  23.         }
  24.     }

这样一个时钟基本上完成了!值得注意的点System.Threading.Timer构造函数。关于参数代码中已经做了解释。

但是写法上还可以继续改进。C#2.0引入了匿名方法,以后例子可以通过匿名方法改写。

  1. System.Threading.Timer timerClock;
  2.             //TimerCallback 委托需要一个 object类型的参数
  3.             timerClock = new System.Threading.Timer(delegate(object obj)
  4.                 { Console.WriteLine(DateTime.Now.ToString());
  5.                     System.Threading.Thread.Sleep(1000);
  6.                     Console.Clear();},
  7.                     null, 0, 1000);

在C#3.0中引入拉姆达表达式,因而上面代码还可以继续精简。

  1. System.Threading.Timer timerClock;
  2.             //TimerCallback 委托需要一个 object类型的参数
  3.             timerClock = new System.Threading.Timer((obj)=>
  4.                 { Console.WriteLine(DateTime.Now.ToString());
  5.                     System.Threading.Thread.Sleep(1000);
  6.                     Console.Clear();},
  7.                     null, 0, 1000);

事实上任何可以应用匿名方法的地方都可以用拉姆达表达是代替!

一个看似简单的程序,如果我们一步步的深入,牵扯到的知识点还不少!

(function(w, d, g, J) { var e = J.stringify || J.encode; d[g] = d[g] || {}; d[g]['showValidImages'] = d[g]['showValidImages'] || function() { w.postMessage(e({'msg': {'g': g, 'm':'s'}}), location.href); } })(window, document, '__huaban', JSON);
阅读(2828) | 评论(0) | 转发(0) |
0

上一篇:没有了

下一篇:没有了

给主人留下些什么吧!~~