System.Threading.Timer 是C# 中的一个定时器,能够定时(不断循环)执行一个任务。它是在线程上执行的,具备很好的安全性。为此 .Net Framework 提供了5个重载的构造器方法。官网的文档是这样解释的:html
System.Threading.Timer 是一个简单、 轻型计时器,它使用回调方法,并由线程池线程提供服务。 但不建议使用 Windows 窗体,由于它的回调不会在用户界面线程上发生。 System.Windows.Forms.Timer 是使用 Windows 窗体的更好选择。 对于基于服务器的计时器的功能,您能够考虑使用 System.Timers.Timer, ,它将引起事件,并具备附加功能。安全
只要您使用 Timer, ,则必须保持对它的引用。 与任何托管对象同样 Timer 没有引用时才进行垃圾收集。 这一事实, Timer 是仍活动不会阻止它正在收集。服务器
当再也不须要一个计时器时,使用 Dispose 计时器持有方法来释放资源。 请注意,回调可能发生后 Dispose() 已调用方法重载,由于计时器是按线程池线程来安排回调的执行。 您能够使用 Dispose(WaitHandle) 方法重载来等待,直到全部回调都已都完成。
执行由计时器的回调方法应可重入,由于它在调用 ThreadPool 线程。 回调可同时执行两个线程池线程上的计时器间隔是否小于执行回调,所需的时间或者是否全部线程池线程都正在使用,而且回调被屡次排队。线程
具体示例以下:orm
static void Main(string[] args) { var autoEvent = new AutoResetEvent(false); Timer t = new Timer(p => FlushData(), autoEvent, 0, 10000);// 第一个参数是:回调方法,表示要定时执行的方法,第二个参数是:回调方法要使用的信息的对象,或者为空引用,第三个参数是:调用 callback 以前延迟的时间量(以毫秒为单位),指定 Timeout.Infinite 以防止计时器开始计时。指定零 (0) 以当即启动计时器。第四个参数是:定时的时间时隔,以毫秒为单位 autoEvent.WaitOne(); }
static void FlushData() { Console.WriteLine("Helo World"); }
参考资料:htm
Timer用法blog