几种定时器(timer)的区别

在.NET的框架之内定时器有以下几种,各自的特点是:

System.Windows.Forms.Timer

  • System.Windows.Forms.Timer (仅 .NET Framework),这是一个触发事件并定期在一个或多个事件接收器中执行代码的 Windows 窗体组件。 组件没有用户界面,旨在在单线程环境中使用;它在 UI 线程上执行。

如果Tick事件内的代码未执行完成,但是下一次Tick定时已经达到会发生什么?不会强行终止未完成的代码,也不会因为上一次Tick事件代码未执行完成而不再触发,而是类似于栈的形式将之前未执行完成的代码堆积,后触发的Tick事件内的代码先执行,先触发未完成的代码后执行。

System.Web.UI.Timer

  • System.Web.UI.Timer (仅 .NET Framework),是一种定期执行异步或同步网页回发的 ASP.NET 组件。

System.Threading.Timer

  • System.Threading.Timer,它按固定的时间间隔对线程池线程执行单个回调方法。 回调方法是在实例化计时器时定义的,无法更改。 与 System.Timers.Timer 类一样,此类用作多线程环境中基于服务器的或服务组件;它没有用户界面,在运行时不可见。

各种用法较为原始,用的较少。

System.Timers.Timer

  • System.Timers.Timer,它将触发事件,并定期在一个或多个事件接收器中执行代码。 类旨在用作多线程环境中基于服务器的组件或服务组件;它没有用户界面,在运行时不可见。

是对System.Threading.Timer的一层封装。可以用SynchronizingObject属性实现在主线程运行,也可以不设置SynchronizingObject属性,是事件在线程池里触发,作为后台线程使用,基本能满足开发需求。

DispatcherTimer

  • DispatcherTimer,Dispatcher队列中的计时器,不能保证正好在设置的时间间隔发生时执行计时器,但能保证不会在时间间隔发生之前执行计时器。何时执行DispatcherTimer操作取决于队列中其他作业及其优先级。

随着时间的推移用不好的话,太吃内存了

原文地址:https://www.cnblogs.com/wesson2019-blog/p/13588598.html