.NET Framework 里的三种Timer

今天在MSDN上看到一篇文章比较.NET Framework里的三种Timer,下面做一个简单的总结:

 

System.Windows.Forms.Timer 

对于WinfForm 程序而言,这个timer会使用UI thread来触发和处理tick事件,简单试验一下,如果将UI Thread sleep了,那么这段时间将不会有tick触发。

image

上图可以看到,中间5秒钟的tick丢失了。

 

System.Timers.Timer

这个timer会启用一个独立的working thread去触发tick事件,但事件的handler还是交给UI thread来处理。当UI thread sleep了,这些tick事件会被暂时存入队列,等待UI thread处理。简单试验一下会发现,当UI Thread sleep了,tick的处理会停止,但当UI thread醒来,这些tick事件会被一次全处理完。

image

但有趣的是,对于console应用程序,事件的处理是使用的独立的线程:

image

 

System.Threading.Timer

这个timer将使用独立的线程来触发tick和处理tick事件,所以如果想在tick触发的时候update UI,就需要做marshal了,因为处理事件的并不是UI thread。

posted on 2012-04-06 15:11  谢绝围观  阅读(390)  评论(0编辑  收藏  举报

导航