--居然工作很久都没有用过System.Thread.Timer。下面是在MSDN上的一些学习笔记。
首选是构造函数 :
Timer(TimerCallback) //使用新创建的 Timer 对象作为状态对象,用一个无限周期和一个无限到期时间初始化 Timer 类的新实例。 Timer(TimerCallback, Object, Int32, Int32) //使用 32 位的有符号整数指定时间间隔,初始化 Timer 类的新实例。 Timer(TimerCallback, Object, Int64, Int64) //用 64 位有符号整数来度量时间间隔,以初始化 Timer 类的新实例。 Timer(TimerCallback, Object, TimeSpan, TimeSpan)//初始化 Timer 类的新实例,使用 TimeSpan 值来度量时间间隔。 Timer(TimerCallback, Object, UInt32, UInt32) //用 32 位无符号整数来度量时间间隔,以初始化 Timer 类的新实例。
备注:
使用 TimerCallback 委托指定希望 Timer 执行的方法。计时器委托在构造计时器时指定,并且不能更改。 此方法不在创建计时器的线程上执行,而是在系统提供的 ThreadPool线程上执行。
创建计时器时,可以指定在第一次执行方法之前等待的时间量(截止时间)以及此后的执行期间等待的时间量(时间周期)。 可以使用 Change 方法更改这些值或禁用计时器。
只要在使用 Timer,就必须保留对它的引用。对于任何托管对象,如果没有对 Timer 的引用,计时器会被垃圾回收。 即使 Timer 仍处在活动状态,也会被回收。
当不再需要计时器时,请使用 Dispose 方法释放计时器持有的资源。请注意,回调可能发生在 Dispose() 方法的重载被调用之后,因为计时器是按线程池线程来安排回调的执行的。 可使用 Dispose(WaitHandle) 方法重载进行等待,直到完成所有的回调。
由计时器执行的回调方法应该是可重入的,因为它是在 ThreadPool 线程上调用的。在以下两种情况中,此回调可以同时在两个线程池线程上执行:一是计时器间隔小于执行此回调所需的时间;二是所有线程池线程都在使用,此回调被多次排队。
System.Threading.Timer 是一个简单的轻量计时器,它使用回调方法并由线程池线程提供服务。不建议将其用于 Windows 窗体,因为其回调不在用户界面线程上进行。System.Windows.Forms.Timer 是用于 Windows 窗体的更佳选择。 要获取基于服务器的计时器功能,可以考虑使用 System.Timers.Timer,它可以引发事件并具有其他功能。
来源:https://www.cnblogs.com/qingshuimuyu/p/4538076.html