在VS中有两个Timer控件
一个是System.Windows.Forms.Timer
另一个是System.Timers.Timer
请问这两个Timer控件在用法上有什么区别?
还有两个Timer的事件分别是Tick和Elapsed,请问这两个事件执行时有什么区别?
一个是System.Windows.Forms.Timer
另一个是System.Timers.Timer
请问这两个Timer控件在用法上有什么区别?
还有两个Timer的事件分别是Tick和Elapsed,请问这两个事件执行时有什么区别?
http://blog.csdn.net/ChampaignWolf/archive/2008/11/19/3336572.aspx
http://www.officemail.net.cn/article.asp?id=36
内部实现机制不同,使用的地方也不一样
System.Windows.Forms.Timer 是实现按用户定义的时间间隔引发事件的计时器。此计时器最宜用于 Windows 窗体应用程序中,并且必须在窗口中使用。
System.Timers.Timer 是在应用程序中生成定期事件。
Tick 和 Elapsed 功能差不多就是分别属于两个类的。
其中:
由于显示断言对话框可能导致 Windows 重复引发 Tick 事件,因此从 Tick 事件中的 Debug 类调用 Assert 方法可能出现意外的行为。建议避免测试该事件中的断言,并转为使用 Write、WriteIf、WriteLine 或 WriteLineIf 方法。如果将 Enabled 设置为 true 并将 AutoReset 设置为 false,则 Timer 在第一次达到间隔时仅引发一次 Elapsed 事件。如果在已启动 Timer 后设置 Interval,则重置计数。例如,如果将间隔设置为 5 秒,然后将 Enabled 设置为 true,则计数将在设置 Enabled 时开始。如果在计数为 3 秒时将间隔重置为 10 秒,则 Elapsed 事件在 Enabled 设置为 true 的 13 秒之后第一次引发。在 .NET Framework 2.0 版及更早版本中,Timer 组件捕获 Elapsed 事件的事件处理程序所引发的所有异常并禁止显示这些异常。在将来的 .NET Framework 版本中,此行为可能会有更改。
Forms.Timer为单线程计时器,依赖当前窗体.
服务器的计时器(System.Timers.Timer)
该计时器为多线程,不依赖窗体,是从线程唤醒,因为与当前窗体不在同一个线程中 ,所以无法操作当前窗体控件
Tick事件:只与Enabled、Interval这两个属性有关,当Enabled设置为true时,每间隔Interval时间都会触发此事件;
Elapsed事件:除了与Enabled、Interval这两个属性有关,还和AutoReset属性有关,即使Enabled设为true,触发此事件有可能是一次,也可能是多次,而且触发的时间并不完全由Interval决定。
请参见我翻译的MSDN的文章:http://blog.csdn.net/flyjimi/archive/2008/11/30/3414143.aspx