分享

C#的tick和线程问题

 goodwangLib 2014-05-04
.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.   在新线程上直接开始)。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多