定时器Timer的选择

FCL提供了好几个Timer供我们选择,但却让很多人分不清他们的使用场合。下面来总结一下:

  1. System.Threading的Timer类。要在线程池上定时执行后台任务,他就是就好的选择。
  2. System.Windows.Forms的Timer类。这个类可以通过Vs的设计界面拖拽,它和UI线程是相关的,它使用的就是UI线程,所以在这里面执行UI更新的操作不会报线程非法访问的错。但是,如果在定时执行的函数里有长时间的运行任务,则会阻塞UI线程,造成界面”假死“。
  3. System.Windows.Threading的DispatcherTimer类。这个是System.Windows.Forms的Timer类在WPF和Silverlight类中的等价物。
  4. System.Timers的Timer类。这是微软早期的产物,可以在界面上拉动,是对System.Threading的Timer类的封装。显得有点不伦不类,建议不要使用这个类。

关于System.Threading的Timer类

public Timer(TimerCallback callback, object state, int dueTime, int period)

dueTime:代表第一次触发要等待的时间。

period:代表以后每次触发要等待的时间。

如果回调方法执行时间很长,计时器可能在上个回调方法还没有完成再次触发。为了解决这个问题,可以将period设为Timeout.Infinite,这样,回调函数就只会执行一次。然后在回调函数的最后,调用Timer的Change方法,为DueTime指定一个新的值,并在此指定period为Timeout.Infinite。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值