System.Windows.Forms.Timer、System.Timers.Timer、System.Threading.Timer的 区别和用法

System.Windows.Forms.Timer执行的时候,如果你在过程中间加一个sleep整个的界面就死掉了,
但是另外两个没有这个情况,System.Timers.Timer、System.Threading.Timer!
System.Timers.Timer、System.Threading.Timer这两个平时用的时候没有发现太大的区别,定时的精度都差不多。
一般我个人用的话,还是用的System.Threading.Timer比较多,用编程的方法比较好用!
System.Windows.Forms.Timer是基于UI的
System.Timers.Timer是基于服务
System.Threading.Timer是基于线程

除了Timer只能用于界面,其他的事在没看出区别
System.Windows.Forms.Timer 还有 WPF那个timer是单线程的 单次运行时间过长会影响下次触发 精度差
System.Threading.Timer   都是多线程的 单次运行时间过长不会影响下次触发

精度高
System.Threading.Timer 是一个简单的轻量计时器,它使用回调方法并由线程池线程提供服务。不建议将其用于 Windows 窗体,因为其回调不在用户界面线程上进行。System.Windows.Forms.Timer 是用于 Windows 窗体的更佳选择。要获取基于服务器的计时器功能,可以考虑使用 System.Timers.Timer,它可以引发事件并具有其他功能。

在《CLR Via C#》中讲多线程时有提到这3个计时器,但作者说System.Timers.Timer是对System.Threading.Timer的报装,不推荐使用,但是在我的WEB项目中的Application_Start中我还是使用的这个而不是Threading.Timer,因为使用Threading.Timer时只执行了一次就不在执行了。

对于计时器在B/S结构中的使用就复杂一些,一般我们把计时器放在Application_OnStart中,这样全局维护一个计时器,可以进行定期备份数据库,定期维护用户等操作,而且方法写作静态的,以免被垃圾回收。而不建议在一般的aspx页面中使用,因为服务器端的定时器对用户这样意义不大,完全可以使用JS代替。而且这个页面的每个请求都可能引入一个新的定时器,导致系统崩溃。另外,定时器是ASP.NET进程,IIS有关,所以对用重要的执行任务,还是建议写成服务或独立程序放在服务器上执行好了。
参考:http://blog.itpub.net/12639172/viewspace-571197


出处:http://www.cnblogs.com/tianciliangen/p/4910503.html

posted on 2018-09-04 16:56  jack_Meng  阅读(5978)  评论(0编辑  收藏  举报

导航