System.Threading.Timer
System.Threading.Timer 是.NET为指定时间间隔中执行一个方法提供的一种机制。
其中System.Threading.TimerCallback构造函数一个参数提供,提供方法的执行。
应用场景——用控制台模拟一个时钟:
- class Program
- {
- static void Main(string[] args)
- {
- System.Threading.Timer timerClock;
- timerClock = new System.Threading.Timer(new TimerCallback(timerCall), null, 0, 1000);
- /*
- //Timer构造函数参数说明:
- Callback:一个 TimerCallback 委托,表示要执行的方法。
- State:一个包含回调方法要使用的信息的对象,或者为空引用(Visual Basic 中为 Nothing)。
- dueTime:调用 callback 之前延迟的时间量(以毫秒为单位)。指定 Timeout.Infinite 以防止计时器开始计时。指定零 (0) 以立即启动计时器。
- Period:调用 callback 的时间间隔(以毫秒为单位)。指定 Timeout.Infinite 可以禁用定期终止。
- */
- Console.Read();
- }
- private static void timerCall(object obj)
- {
- Console.WriteLine(DateTime.Now.ToString());
- System.Threading.Thread.Sleep(1000);
- Console.Clear();
- }
- }
这样一个时钟基本上完成了!值得注意的点System.Threading.Timer构造函数。关于参数代码中已经做了解释。
但是写法上还可以继续改进。C#2.0引入了匿名方法,以后例子可以通过匿名方法改写。
- System.Threading.Timer timerClock;
- //TimerCallback 委托需要一个 object类型的参数
- timerClock = new System.Threading.Timer(delegate(object obj)
- { Console.WriteLine(DateTime.Now.ToString());
- System.Threading.Thread.Sleep(1000);
- Console.Clear();},
- null, 0, 1000);
在C#3.0中引入拉姆达表达式,因而上面代码还可以继续精简。
- System.Threading.Timer timerClock;
- //TimerCallback 委托需要一个 object类型的参数
- timerClock = new System.Threading.Timer((obj)=>
- { Console.WriteLine(DateTime.Now.ToString());
- System.Threading.Thread.Sleep(1000);
- Console.Clear();},
- 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);