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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值