使用Timer类

简介: 用过VB的人都直到VB中有一个很有用的Timer控件,这个控件能够使你在规定的时间间隔内来执行指定的代码,即使到了现在的.Net中依然有这个控件,而且只能在WinForm的模式下才能够使用,如果在控制台程序下需要一个类似的功能函数的话,那么只能使用System.Threading 下的Timer类了。

用过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执行的截图:

 

目录
相关文章
java的Timer定时器
java的Timer定时器
|
Java 测试技术
在多线程中自定义实现定时器(Timer)
在多线程中自定义实现定时器(Timer)
|
Java API 调度
Timer - 基础篇
Timer - 基础篇
187 0
Timer - 基础篇
|
消息中间件 Java C#
C# 三个Timer
C# 三个Timer
306 0
C# 三个Timer
|
安全 调度
定时器Timer详细解析与举例
定时器java.util.Timer:功能是在指定的时间间隔内反复触发指定任务的定时器事件,主要用于定时性、周期性任务的触发。
|
API 调度 Android开发
【Android 异步操作】Timer 定时器 ( Timer 与 TimerTask 基本使用 | Timer 定时器常用用法 | Timer 源码分析 )
【Android 异步操作】Timer 定时器 ( Timer 与 TimerTask 基本使用 | Timer 定时器常用用法 | Timer 源码分析 )
931 0
|
Java
Java 中Timer和TimerTask 定时器和定时任务使用的例子
<p>转自:<a target="_blank" href="http://blog.csdn.net/kalision/article/details/7692796">http://blog.csdn.net/kalision/article/details/7692796</a></p> <p><span style="font-family:Arial; font-size:14
5066 0