C#的tick和线程问题

.NET一共有3个Timer: 
1.   System.Windows.Forms.Timer: 
      这是你说的(因为有Tick事件)。是通过Windows消息出发OnTimer事件的,Tick事件总是触发在程序的主线程(UIThread)上(1.   不是新线程)。如果主线程忙(例如,上一次的Tick还没有执行完),消息就得不到及时处理(2.   等待前一个完成)。 

2.   System.Timer.Timer和System.Threading.Timer: 
      前者是通过调用Windows的WaitableTimer实现的,后者是.NET的简单的Thread.Sleep实现。两个实现都是用了.NET线程池(ThreadPool),所以Elapsed事件会在ThreadPool里选择一个线程执行(1.   不一定是新线程,但肯定不是建立Timer的线程)。这样做的好处是如果前一次Elapsed没有完成,后一次的可以从ThreadPool里选一个新的线程开始执行。(2.   在新线程上直接开始)。

你可能感兴趣的:(VS2005)