C#中的Tick和Elapsed的区别

zhu4139365 2008-12-03 06:04:19
在VS中有两个Timer控件
一个是System.Windows.Forms.Timer
另一个是System.Timers.Timer
请问这两个Timer控件在用法上有什么区别?
还有两个Timer的事件分别是Tick和Elapsed,请问这两个事件执行时有什么区别?
...全文
1157 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
wangping_li 2008-12-03
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 soaringbird 的回复:]
System.Threading..::.Timer 是一个简单的轻量计时器,它使用回调方法并由线程池线程提供服务。不建议将其用于 Windows 窗体,因为其回调不在用户界面线程上进行。System.Windows.Forms..::.Timer 是用于 Windows 窗体的更佳选择。要获取基于服务器的计时器功能,可以考虑使用 System.Timers..::.Timer,它可以引发事件并具有其他功能。
[/Quote]
up
flyjimi 2008-12-03
  • 打赏
  • 举报
回复
。.NET Framework 类库提供了三个不同的timer类:System.Windows.Forms.Timer, System,Timers.Timer 和 System.Threading.Timer。每个Timer类被设计优化用于不同的场合。
请参见我翻译的MSDN的文章:http://blog.csdn.net/flyjimi/archive/2008/11/30/3414143.aspx
liningln0 2008-12-03
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 lc7cl 的回复:]

System.Windows.Forms.Timer 是实现按用户定义的时间间隔引发事件的计时器。此计时器最宜用于 Windows 窗体应用程序中,并且必须在窗口中使用。
System.Timers.Timer 是在应用程序中生成定期事件。
Tick 和 Elapsed 功能差不多就是分别属于两个类的。
其中:
由于显示断言对话框可能导致 Windows 重复引发 Tick 事件,因此从 Tick 事件中的 Debug 类调用 Assert 方法可能出现意外的行为。建议避免测试该事件中的断言,…
[/Quote]

顶...
wuyq11 2008-12-03
  • 打赏
  • 举报
回复
Winform 的计时器(System.Windows.Forms.Timer)
Forms.Timer为单线程计时器,依赖当前窗体.
服务器的计时器(System.Timers.Timer)
该计时器为多线程,不依赖窗体,是从线程唤醒,因为与当前窗体不在同一个线程中 ,所以无法操作当前窗体控件
Tick事件:只与Enabled、Interval这两个属性有关,当Enabled设置为true时,每间隔Interval时间都会触发此事件;
Elapsed事件:除了与Enabled、Interval这两个属性有关,还和AutoReset属性有关,即使Enabled设为true,触发此事件有可能是一次,也可能是多次,而且触发的时间并不完全由Interval决定。
lc7cl 2008-12-03
  • 打赏
  • 举报
回复

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 版本中,此行为可能会有更改。
soaringbird 2008-12-03
  • 打赏
  • 举报
回复
System.Threading..::.Timer 是一个简单的轻量计时器,它使用回调方法并由线程池线程提供服务。不建议将其用于 Windows 窗体,因为其回调不在用户界面线程上进行。System.Windows.Forms..::.Timer 是用于 Windows 窗体的更佳选择。要获取基于服务器的计时器功能,可以考虑使用 System.Timers..::.Timer,它可以引发事件并具有其他功能。
net5i 2008-12-03
  • 打赏
  • 举报
回复
搂主应该Google : System.Timers.Timer区别
zhu4139365 2008-12-03
  • 打赏
  • 举报
回复
用的什么搜索引擎,怎么我没google出来呢?
wjq 2008-12-03
  • 打赏
  • 举报
回复
System.Timers.Timer 可以用于Services,System.Windows.Forms.Timer主要用于Winform。
内部实现机制不同,使用的地方也不一样
net5i 2008-12-03
  • 打赏
  • 举报
回复
不太好说清楚,帮搂主找了个资料,可以看看:
http://www.officemail.net.cn/article.asp?id=36
孤独侠客123 2008-12-03
  • 打赏
  • 举报
回复
http://www.officemail.net.cn/article.asp?id=36
http://blog.csdn.net/ChampaignWolf/archive/2008/11/19/3336572.aspx

110,533

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧