使用Timer,假如Timer设置为每10秒执行一次。如果Timer里的代码执行时间超出10秒会怎么样??谢谢大侠!

解决方案 »

  1.   

    .NET一共有3个Timer:   1. System.Windows.Forms.Timer:   
    是通过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. 在新线程上直接开始)。