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

 

时间: 2024-07-29 06:41:34

使用Timer类的相关文章

关于C#中timer类 在C#里关于定时器类就有3个

定时 ·关于C#中timer类  在C#里关于定时器类就有3个   1.定义在System.Windows.Forms里   2.定义在System.Threading.Timer类里   3.定义在System.Timers.Timer类里  System.Windows.Forms.Timer是应用于WinForm中的,它是通过Windows消息机制实现的,类似于VB或Delphi中的Timer控件,内部使用API  SetTimer实现的.它的主要缺点是计时不精确,而且必须有消息循环,Co

as3中Timer类——Timer与时钟实例

范例1: 没有哪个例子比一个时钟更加适合描述Timer类的基本应用. 步骤一: 在flash舞台上放置一个钟面,再新建层画出时针.分针.秒针和轴心.3个指针分别命名为 hourPoint,minutePoint,secondPoint.这些指针的注册点在底部中央.如图:   下面我们来让它运转起来: 在属性面板中输入Clock.新建一个文档类Clock.as.代码如下: 代码:  代码如下 复制代码 [code] package { import flash.display.Sprite; im

详解C#中的定时器Timer类及其垃圾回收机制_C#教程

关于C# Timer类  在C#里关于定时器类就有3个 C# Timer使用的方法1.定义在System.Windows.Forms里 C# Timer使用的方法2.定义在System.Threading.Timer类里  " C# Timer使用的方法3.定义在System.Timers.Timer类里 下面我们来具体看看这3种C# Timer用法的解释: (1)System.Windows.Forms.Timer 应用于WinForm中的,它是通过Windows消息机制实现的,类似于VB或D

Java定时任务:利用java Timer类实现定时执行任务的功能_java

一.概述 在java中实现定时执行任务的功能,主要用到两个类,Timer和TimerTask类.其中Timer是用来在一个后台线程按指定的计划来执行指定的任务. TimerTask一个抽象类,它的子类代表一个可以被Timer计划的任务,具体要执行的代码写在TimerTask需要被实现的run方法中. 二.先看一个最简单的例子 我们通过代码来说明 import java.text.SimpleDateFormat; import java.util.Date; import java.util.T

求助:使用System.Windows.Forms.Timer类遇到的奇怪问题

问题描述 如下代码:publicclassForm1:System.Windows.Forms.Form{privateSystem.Windows.Forms.Buttonbutton1;privateSystem.Windows.Forms.Timertimer1;privateSystem.Windows.Forms.Timertimer2;privateinttest1=0;privateinttest2=0;privatevoidForm1_Load(objectsender,Syst

通过查询Timer类的方法,解决以下问题当程序运行时,

问题描述 通过查询Timer类的方法,解决以下问题当程序运行时, 通过查询Timer类的方法,解决以下问题: 当程序运行时,如果是每月的最后一天的下午5点,就自动调用某个任务 解决方案 在Timer_Tick里面写 if (DateTime.Now.AddDays(1).Month == DateTime.Now.Month + 1 && DateTime.Now.Hour == 17) { ... Timer1.Stop(); } 解决方案二: 设置schedule task,不需要自己

asp.net C#中timer类的用法

于C#中timer类  在C#里关于定时器类就有3个   1.定义在System.Windows.Forms里   2.定义在System.Threading.Timer类里   3.定义在System.Timers.Timer类里  System.Windows.Forms.Timer是应用于WinForm中的,它是通过Windows消息机制实现的,类似于VB或Delphi中的Timer控件,内部使用API  SetTimer实现的.它的主要缺点是计时不精确,而且必须有消息循环,Console

flash Timer类使用

代码如下 var i:Number=0; var myTimer:Timer = new Timer(100); showText(i) function StartTimer(Event:MouseEvent) {  myTimer.addEventListener("timer", Tracetimer);  myTimer.start(); } function Tracetimer(event:TimerEvent):void {  i++;  showText(i)  //t

WorkerMan 入门学习之(三)基础教程-Timer类的使用

1.ServerTimer.php 代码: <?php /** * 定时器学习 */ require_once __DIR__ . '/Workerman/Autoloader.php'; use Workerman\Worker; use Workerman\Lib\Timer; // 创建一个容器 $worker = new Worker('websocket://0.0.0.0:12345'); // 连接回调 $worker->onConnect = function ($connec