Threading.Timer 类用法总结

  Threading.Timer是更灵活的一种计时器,可以有程序员自行设定计时周期、第一个周期前是不是要有延迟、什么时候开始运行计时器,以及给计时器调用的方法传一个参数等。

 

  以下是Timer的构造函数,源自MSDN:

 名称说明
公共方法1Timer(TimerCallback)使用新创建的 Timer 对象作为状态对象,用一个无限周期和一个无限到期时间初始化 Timer 类的新实例。
公共方法2Timer(TimerCallback, Object, Int32, Int32)使用 32 位的有符号整数指定时间间隔,初始化 Timer 类的新实例。
公共方法由 XNA Framework 提供支持3Timer(TimerCallback, Object, Int64, Int64)用 64 位有符号整数来度量时间间隔,以初始化 Timer 类的新实例。
公共方法由 XNA Framework 提供支持4Timer(TimerCallback, Object, TimeSpan, TimeSpan)初始化 Timer 类的新实例,使用 TimeSpan 值来度量时间间隔。
公共方法由 XNA Framework 提供支持5Timer(TimerCallback, Object, UInt32, UInt32)用 32 位无符号整数来度量时间间隔,以初始化 Timer 类的新实例。

  这里,我觉得比较常用的是第1、2、4构造函数。

    Timer(TimerCallback) 此构造函数仅仅定义计时器本身和TimerCallBack Delegate 类型的方法(此方法需带有一个object类型的参数)。不会显示给这个方法传递参数,其实传递给他的是这个计时器对象本身(详见MSDN中的例子代码)。此种计时器的启动是要用计时器实例调用Change(int32, int32)——还有一些类似于构造函数的重载方法。Change(int32, int32)方法第一个参数为第一次启动计时器的延时,以毫秒计算;第二个参数为调用TimerCallBack代理的方法的周期,也以毫秒计。这两个参数均可以设置为Timeout.Infinite,这是个“const int”,值为-1,设置这个值的话等同于停止正在运行的Timer。其实次构造函数本省就是用Timeout.Infinite这个值来初始化的,并把Timer实例本身传递给了周期要调用的方法。

    Timer(TimerCallback, Object, Int32, Int32) 构造函数分别为符合TimerCallBack类型的代理实例、代理实例要传递给代理方法的参数、计时器启动延时、计时器调用代理的周期。这个方法中两个Int32参数的解释,可以参见上一个构造函数中Change(int32, int32)方法的解释。此构造方法相对要灵活,起码可以完成给定时调用方法传递参数的功能。如果延迟时间和周期是固定值,则定时器在初始化后立即启动,要是设置成Timeout.Infinte,就需要计时器实例调用Change(int32, int32)方法启动计时器了(当然,Change(int32, int32)方法可以在计时器实例化后随时调用,设置延时和改变周期)。

    Timer(TimerCallback, Object, TimeSpan, TimeSpan) 相对与上一个构造函数提供了较为便利的延时和周期的计算形式,配合Change(TimeSpan, TimeSpan)方法使计时器更加的灵活。TimeSpan提供了方便的加减操作函数,需要提醒的是,此对象加减之后要由变量接收,如:

    _timeSpan1 = _timeSpan1.Add(_timeSpan2);

  此外,Threading.TimerCallBack类型方法是被分配到线程池中执行的,“为 callback 指定的方法应是可重入的,这是因为该方法是在 ThreadPool 线程上调用的。 该方法在以下两种情况下可以同时在两个线程池线程中执行:一是计时器间隔小于执行该方法所需的时间;二是所有线程池线程都在使用,并且多次对该方法进行排队。”。

 

以上总结源于MSDN详情也请参考它:http://msdn.microsoft.com/zh-cn/library/system.threading.timer(v=vs.100).aspx

如有谬误,欢迎大家指正。

 

 

转载于:https://www.cnblogs.com/jinhai735/p/3310319.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值