zl程序教程

您现在的位置是:首页 >  后端

当前栏目

C#中timer类的用法总结

c# 用法 总结 timer
2023-06-13 09:15:06 时间

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 Application(控制台应用程序)无法使用。 

System.Timers.Timer和System.Threading.Timer非常类似,它们是通过.NET Thread Pool实现的,轻量,计时精确,对应用程序、消息没有特别的要求。System.Timers.Timer还可以应用于WinForm,完全取代上面的Timer控件。它们的缺点是不支持直接的拖放,需要手工编码。

例:
使用System.Timers.Timer类
//实例化Timer类,设置间隔时间为10000毫秒;
System.Timers.Timert=newSystem.Timers.Timer(10000);
//到达时间的时候执行事件;
t.Elapsed+=newSystem.Timers.ElapsedEventHandler(theout);
t.AutoReset=true;//设置是执行一次(false)还是一直执行(true);
t.Enabled=true;//是否执行System.Timers.Timer.Elapsed事件;

====================================
自己写的一个用System.Timer类的方法

复制代码代码如下:

publicclassBF_CheckUpdate
    {
        privatestaticobjectLockObject=newObject();

        //定义数据检查Timer
        privatestaticTimerCheckUpdatetimer=newTimer();

        //检查更新锁
        privatestaticintCheckUpDateLock=0;

        ///
        ///设定数据检查Timer参数
        ///
        internalstaticvoidGetTimerStart()
        {
            //循环间隔时间(10分钟)
            CheckUpdatetimer.Interval=600000;
            //允许Timer执行
            CheckUpdatetimer.Enabled=true;
            //定义回调
            CheckUpdatetimer.Elapsed+=newElapsedEventHandler(CheckUpdatetimer_Elapsed);
            //定义多次循环
            CheckUpdatetimer.AutoReset=true;
        }

        ///
        ///timer事件
        ///
        ///
        ///
        privatestaticvoidCheckUpdatetimer_Elapsed(objectsender,ElapsedEventArgse)
        {
           //加锁检查更新锁
            lock(LockObject)
            {
                if(CheckUpDateLock==0)CheckUpDateLock=1;
                elsereturn;
            }        

           //Morecodegoeshere.
          //具体实现功能的方法
           Check();
              //解锁更新检查锁
            lock(LockObject)
            {
                CheckUpDateLock=0;
            }           
        }
      }