用过VB的人都直到VB中有一个很有用的Timer控件,这个控件能够使你在规定的时间间隔内来执行指定的代码
,即使到了现在的.Net中依然有这个控件,而且只能在WinForm的模式下才能够使用,如果在控制台程序下需要一个类似的功能函数的话,那么只能使用System.Threading 下的Timer类了。为什么要用 控制台程序?
呵呵!由于我一直是做服务器端开发,所以使自己的程序有良好的跨平台性质。WinFrom跨平台问题太多,所以暂不考虑!
首先要引用
System.Threading
然后编辑如下代码:
using System; using System.Threading; namespace Demo { //累计控制器类<自定义> internal sealed class TimeCallBackHandle { public int intCount = 0; public Timer tmeHandle; } public sealed class Demo { [STAThread] public static void Main(string[] args) { // 用累计控制器类来控制 Timer类 TimeCallBackHandle timerhandle=new TimeCallBackHandle(); // 用TimerCallback 委托指定希望 Timer类 执行的方法 TimerCallback timercallback = new TimerCallback(TimeCallBackMethod); // 构造 Timer类 // public Timer(TimerCallback, object, TimeSpan, TimeSpan) // TimerCallback => 一个 TimerCallback 委托,表示要执行的方法。 // object => 一个包含回调方法要使用的信息的对象,或者为空引用(Visual Basic 中为 Nothing)。 Timer timer = new Timer(timercallback, timerhandle,TimeSpan.FromSeconds(1), TimeSpan.FromSeconds(1)); // 保持timer句柄,使timer够在回调方法中被释放 // 因为timer实质上是地址,当Dispose的时候是将 // timer引用清空 // 那么再清空之后再被判断(timer!=null) // 则抛出 NullReferenceException timerhandle.tmeHandle=timer; // Main函数开始中断直到 TimerCallback 执行完 // 可以Thread.Sleep(0),那样会过于消耗 // CPU资源,可以定义为 TimerCallback 时间 // 间隔的五分之一 while(timerhandle.tmeHandle != null) Thread.Sleep(200); Console.WriteLine("主函数线程()"); Console.ReadLine(); } private static void TimeCallBackMethod(object objTimerHandle) { TimeCallBackHandle timerhandle = objTimerHandle as TimeCallBackHandle; //假设我们需要执行5次 //执行完后释放资源 if (timerhandle.intCount>=5) { Console.WriteLine("释放资源(timerhandle.tmeHandle.Dispose()"); timerhandle.tmeHandle.Dispose(); timerhandle.tmeHandle=null; return; } //累计控制器 timerhandle.intCount++; Console.WriteLine("时间委托(TimeCallBackMethod)"); } } } |
这里我自己创建了一个累计控制器类来帮助控制TimeCallBackMethod()方法执行的次数
嗯 下面是该程序在Mono1.1执行的截图: