timer类有三种1.System.Windows.Forms.Timer 使用地方:Windows 窗体应用程序中,并且必须在窗口中使用。 2.System.Timers.Timer 使用地方:在应用程序中 一类是执行方法: 1.System.Threading.Timer 使用地方:执行方法的机制,无法继承此类。
System.Windows.Forms.timer 用法
1.System.Windows.Forms.Timer myTimer = new System.Windows.Forms.Timer();//实例化一个timer 2.myTimer.Tick += new EventHandler(函数名); //给timer挂起事件//函数的参数为(Object myObject,EventArgs myEventArgs) 3.myTimer.Enabled = true;//使timer可用 4.myTimer.Interval = n; //设置时间间隔,以毫秒为单位 5.myTimer.Stop(); //如果要暂停计时则使用Stop()方法 6.myTimer.Enabled = false;//若要停止使用timer,则使之不可用
System.Timers.Timer用法: System.Timers.Timer t = new System.Timers.Timer(10000); //实例化Timer类,设置间隔时间为10000毫秒; t.Elapsed += new System.Timers.ElapsedEventHandler(theout); //到达时间的时候执行事件; t.AutoReset = true; //设置是执行一次(false)还是一直执行(true); t.Enabled = true; //是否执行System.Timers.Timer.Elapsed事件; public void theout(object source, System.Timers.ElapsedEventArgs e) { MessageBox.Show('OK!'); }
注意:在用System.Timers.Timer的时候 timer是会按照interval的时间严格运行(时间到了触发elapsed事件运行被注册的callback函数, 不管函数运行的时间多久) 因此会导致可能callback的事件还没有执行完 下一个callback又来执行了。导致线程激增。 解决方法: private void timer1_Elapsed(object sender, System.Timers.ElapsedEventArgs e){ timer1.Enabled = false; try { 。。。。。。。。。。。 } catch () { 。。。。。。。。。。。 } finally { timer1.Enabled = true; }} 在callback函数运行的时候把timer关掉 结束函数时再开启。
在函数中直接进行匿名的elapsed的方法的写法:
timer.Elapsed += (obj, evet) => { TimerCustom singleTime = obj as TimerCustom; singleTime.Enabled = false; if (singleTime != null) { if (singleTime.queue.Count != 0) { var item = singleTime.queue.Dequeue(); Send(item); singleTime.Enabled = true; } } };
System.Threading.Timer用法:Demo application: 应用场景:在windows form程序自动执行某项工作后,希望其windows form能够自动关闭。 代码设计:(1)首先声明Timer变量: private System.Threading.Timer timerClose;
(2)在上述自动执行代码后面添加如下Timer实例化代码: // Create a timer thread and start it timerClose = new System.Threading.Timer(new TimerCallback(timerCall), this, 5000, 0);
Timer构造函数参数说明: Callback:一个 TimerCallback 委托,表示要执行的方法。 State:一个包含回调方法要使用的信息的对象,或者为空引用(Visual Basic 中为 Nothing)。 dueTime:调用 callback 之前延迟的时间量(以毫秒为单位)。指定 Timeout.Infinite 以防止计时器开始计时。指定零 (0) 以立即启动计时器。 Period:调用 callback 的时间间隔(以毫秒为单位)。指定 Timeout.Infinite 可以禁用定期终止。
(3)定义TimerCallback委托要执行的方法: private void timerCall(object obj) { timerClose.Dispose(); this.Close(); } 1 using System; 2 using System.Collections.Generic; 3 using System.ComponentModel; 4 using System.Data; 5 using System.Drawing; 6 using System.Linq; 7 using System.Text; 8 using System.Windows.Forms; 9 using System.Threading;10 11 namespace MYTimerTest12 {13 public partial class Form1 : Form14 {15 public Form1()16 {17 InitializeComponent();18 }19 20 private void Form1_Load(object sender, EventArgs e)21 {22 23 System.Threading.Timer timer = new System.Threading.Timer(new TimerCallback(timer_Elapsed), null, 0, 1000);24 }25 26 void timer_Elapsed(object sender)27 {28 for (int i = 0; i < 10;="" i++)29="" {30="" console.out.writeline(datetime.now="" +="" '="" '="" +="" datetime.now.millisecond.tostring()="" +="" 'timer="" in:');31="" }32="" 33="" }34="" }35=""> |
|
来自: goodwangLib > 《C#》