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

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Timer是Java中的一个,用于在一定时间后执行某个任务。它可以被用于定时执行任务、周期性执行任务,也可以用于在某个时间点执行任务。 Timer包含两个主要方法: 1. schedule(TimerTask task, long delay):在指定的延迟时间后执行任务。 2. schedule(TimerTask task, long delay, long period):在指定的延迟时间后开始执行任务,并在指定的时间间隔内重复执行该任务。 Timer还提供了其他一些方法,例如cancel()方法可以取消当前任务,purge()方法可以清除所有已取消的任务。 下面是一个简单的示例代码,演示了如何使用Timer定时执行任务: ``` import java.util.Timer; import java.util.TimerTask; public class MyTimerTask extends TimerTask { public void run() { System.out.println("Task executed at " + new Date()); } public static void main(String[] args) { Timer timer = new Timer(); TimerTask task = new MyTimerTask(); // 在5秒后执行任务 timer.schedule(task, 5000); } } ``` 在上面的代码中,首先定义了一个MyTimerTask,它继承自TimerTask,并重写了run()方法,该方法中定义了要执行的任务。然后在main()方法中创建了一个Timer的实例,以及一个MyTimerTask实例,并使用schedule()方法指定了任务的执行时间。在这个例子中,任务将在5秒后执行。 需要注意的是,Timer是单线程的,如果任务需要执行时间较长,会影响到后续任务的执行时间,因此在实际应用中,需要根据任务的需要,选择合适的定时方案。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值