C#里面的三种Timer



在.net中有三种计时器,一是System.Windows.Forms命名空间下的Timer控件,它直接继承自Componet;二是System.Timers命名空间下的Timer类。

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

System.Timers.Timer类:定义一个System.Timers.Timer对象,绑定Elapsed事件,通过Start()方法启动计时,通过Stop()方法或者Enable=False停止计时。AutoReset属性设置是否重复计时。Elapsed事件绑定就相当另开了一个线程,也就是说在Elapsed绑定的事件里不能访问其它线程里的控件。

System.Threading.Timer:定义该类时,主要有四个参数。TimerCallBack,一个返回值为void,参数为object的委托,也是计时器执行的方法。Object state,计时器执行方法的的参数。 int dueTime,调用 callback
之前延迟的时间量(以毫秒为单位)。指定 Timeout.Infinite
以防止计时器开始计时。指定零 (0)
以立即启动计时器。

int Period,调用 callback
的时间间隔(以毫秒为单位)。指定 Timeout.Infinite
可以禁用定期终止。

在这三种计时器中,第一种计时器和所在的Form处于同一个线程,因此执行的效率不高。而第二种和第三中计时器执行的方法都是新开一个线程,所以执行效率比第一种计时器要好。因此在使用计时器时,建议使用第二种和第三种。

下面是三中定时器使用的例子

1)Timer控件

public partial class Timer : Form

{

int count = 0;

public Timer()

{

InitializeComponent();

//timer控件可用

this.timer1.Enabled = true;

//设置timer控件的Tick事件触发的时间间隔

this.timer1.Interval = 1000;

//停止计时

this.timer1.Stop();

}

private void timer1_Tick(object sender, EventArgs e)

{

count += 1;

this.tbTimer.Text = count.ToString();

}

private void btStart_Click(object sender, EventArgs e)

{

//开始计时

this.timer1.Start();

}

private void btStop_Click(object sender, EventArgs e)

{

//停止计时

this.timer1.Stop();

}

}

2)System.Timers.Timer

public partial class Timer : Form

{

int count = 0;

private System.Timers.Timer timer = new System.Timers.Timer();

public Timer()

{

InitializeComponent();

//设置timer可用

timer.Enabled = true;

//设置timer

timer.Interval = 1000;

//设置是否重复计时,如果该属性设为False,则只执行timer_Elapsed方法一次。

timer.AutoReset = true;

timer.Elapsed+=new System.Timers.ElapsedEventHandler(timer_Elapsed);

}

private void timer_Elapsed(object sender, System.Timers.ElapsedEventArgs e)

{

count += 1;

SetTB(count.ToString());

}

private void btStart_Click(object sender, EventArgs e)

{

timer.Start();

}

private void btStop_Click(object sender, EventArgs e)

{

timer.Stop();

}

private delegate void SetTBMethodInvok(string value);

private void SetTB(string value)

{

if (this.InvokeRequired)

{

this.Invoke(new SetTBMethodInvok(SetTB), value);

}

else

{

this.tbTimer.Text = value;

}

}

}

3) System.Threading.Timer

public partial class Timer : Form

{

int count = 0;

System.Threading.Timer timerThr;

private delegate void SetTBMethodInvoke(object state);

public Timer()

{

InitializeComponent();

//初始化一个计时器,一开始不计时,调用Callback的时间间隔是500毫秒

timerThr = new System.Threading.Timer(new TimerCallback(SetTB), null, Timeout.Infinite, 500);

}

public void SetTB(object value)

{

if (this.InvokeRequired)

{

this.Invoke(new SetTBMethodInvoke(SetTB), value);

}

else

{

count += 1;

this.tbTimer.Text = count.ToString();

}

}

private void btStart_Click(object sender, EventArgs e)

{

//开始计时

timerThr.Change(0, 500);

}

private void btStop_Click(object sender, EventArgs e)

{

//停止计时

timerThr.Change(Timeout.Infinite, 500);

}

}

C#里面的三种Timer

时间: 2024-11-10 12:43:42

C#里面的三种Timer的相关文章

.NET中的三种Timer的区别和用法(转)

最近正好做一个WEB中定期执行的程序,而.NET中有3个不同的定时器.所以正好研究研究.这3个定时器分别是:  //1.实现按用户定义的时间间隔引发事件的计时器.此计时器最宜用于 Windows 窗体应用程序中,并且必须在窗口中使用.  System.Windows.Forms.Timer  // 2.提供以指定的时间间隔执行方法的机制.无法继承此类.  System.Threading.Timer  //3.在应用程序中生成定期事件.  System.Timers.Timer  这三个定时器位

三种Timer使用

System.Windows.Forms.Timer,  System.Threading.Timer,  System.Timer,三种Timer使用如下 第一种:System.Windows.Forms.Timer使用 [DllImport("User32.dll", CharSet = CharSet.Auto)] public static extern int SetWindowText(IntPtr hWnd, string text); [DllImport("

.NET中的三种Timer的区别和用法

//1.实现按用户定义的时间间隔引发事件的计时器.此计时器最宜用于 Windows 窗体应用程序中,并且必须在窗口中使用. System.Windows.Forms.Timer // 2.提供以指定的时间间隔执行方法的机制.无法继承此类. System.Threading.Timer //3.在应用程序中生成定期事件. System.Timers.Timer 这三个定时器位于不同的命名空间内,上面大概介绍了3个定时器的用途,其中第一个是只能在Windows窗体中使用的控件.在.NET1.1里面,

三种timer控件的简单实例

1 1.system.windows.forms 2 3 2.system.threading.timer 4 5 3.system.timers.timer 6 7 8 9 using System; 10 using System.Collections.Generic; 11 using System.ComponentModel; 12 using System.Data; 13 using System.Drawing; 14 using System.Linq; 15 using S

C#里面的三种定时计时器:Timer

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

java实现多线程的三种方式

java中实现多线程的方法有两种:继承Thread类和实现runnable接口 1.继承Thread类,重写父类run()方法   public class thread1 extends Thread {           public void run() {                 for (int i = 0; i < 10000; i++) {                         System.out.println("我是线程"+this.get

详解三种java实现多线程的方式

java中实现多线程的方法有两种:继承Thread类和实现runnable接口. 1.继承Thread类,重写父类run()方法 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 public class thread1 extends Thread {    public void run() {        for (int i = 0; i < 10000; i++) {            System.out.println("我是线程"+

使用JavaScript判断图片是否加载完成的三种实现方式

有时需要获取图片的尺寸,这需要在图片加载完成以后才可以.有三种方式实现,下面一一介绍. 一.load事件 <!DOCTYPE HTML> <html> <head> <meta charset="utf-8"> <title>img - load event</title> </head> <body> <img id="img1" src="http:/

iOS:延时执行的三种方式

延时执行的三种方式:performSelectorXXX方法.GCD中延时函数.创建定时器 第一种方式:NSObject分类当中的方法,延迟一段时间调用某一个方法 @interface NSObject (NSDelayedPerforming) ※延时调用在当前线程使用特定模式的方法(如果数组没有数据或者参数为nil,则不会调用selector中方法) - (void)performSelector:(SEL)aSelector withObject:(id)anArgument afterD