C# Timer定时器分类

发布时间 2023-04-11 10:29:28作者: 老杨_在路上

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

1、System.Windows.Forms:【基于UI】

  System.Windows.Forms命名空间下的Timer控件,它直接继承自Componet。Timer控件只有绑定了Tick事件和设置Enabled=True后才会自动计时,停止计时可以用Stop()方法控制,通过Stop()停止之后,如果想重新计时,可以用Start()方法来启动计时器。Timer控件和它所在的Form属于同一个线程;


2、System.Timers.Timer:【基于服务】

  System.Timers命名空间下的Timer类。System.Timers.Timer类:定义一个System.Timers.Timer对象,然后绑定Elapsed事件,通过Start()方法来启动计时,通过Stop()方法或者Enable=false停止计时。AutoReset属性设置是否重复计时(设置为false只执行一次,设置为true可以多次执行)。Elapsed事件绑定相当于另开了一个线程,也就是说在Elapsed绑定的事件里不能访问其它线程里的控件(需要定义委托,通过Invoke调用委托访问其它线程里面的控件)。


3、System.Threading.Timer:【基于线程】

  System.Threading.Timer类。定义该类时,通过构造函数进行初始化。
在上面所述的三种计时器中,第一种计时器和它所在的Form处于同一个线程,因此执行的效率不高;而第二种和第三种计时器执行的方法都是新开一个线程,所以执行效率比第一种计时器要好,因此在选择计时器时,建议使用第二种和第三种。

4、System.Windows.Threading.DispatcherTimer

  DispatcherTimer:Dispatcher队列中的计时器,不能保证正好在设置的时间间隔发生时执行计时器,但能保证不会在时间间隔发生之前执行计时器。这是因为  DispatcherTimer的操作也是放置在Dispatcher队列中的,何时执行DispatcherTimer操作取决于队列中其他作业及其优先级。

 

private readonly System.Timers.Timer timerCurrStatus;

public Form1()
{

  timerCurrStatus = new System.Timers.Timer(1000);

  timerCurrStatus.Elapsed += timerCurrStatusElapsed;

}

private void timerCurrStatusElapsed(object sender, ElapsedEventArgs e)
{

://to do something

}

private void CardInit()
{

  timerCurrStatus.Enabled = true; // 打开定时器

}

 

private void CardExit()
{

  timerCurrStatus.Enabled = false;//退出定时器

}