.net中的计时器 - 何时使用?

时间:2009-08-30 04:41:03

标签: multithreading timer

.net中有三个Timer类(Timers.Timer,Threading.Timer和Windows.Forms.Timer)。哪个应该用?使用它们的性能意义是什么?

2 个答案:

答案 0 :(得分:1)

查看this是否有帮助。

编辑:除了上述内容,我认为计时器的间隔容量不同 我记得在其中一个dotnetrocks节目中听说过它。我会试着找出来。

EDIT2:另请查看每个类在MSDN页面上添加的警告。
http://msdn.microsoft.com/en-us/library/system.timers.timer.aspx
http://msdn.microsoft.com/en-us/library/system.threading.timer.aspx
http://msdn.microsoft.com/en-us/library/system.threading.timer.aspx
http://msdn.microsoft.com/en-us/library/system.windows.forms.timer.aspx(这说,它针对Windows应用程序进行了优化。因此,应该在Windows应用程序中使用。)

IMO,计时器的功能不同。所以,你必须决定哪一个适合你的需要,牢记这一点

答案 1 :(得分:1)

据我所知,它们之间没有性能差异 - 与执行您将在timer elapsed事件处理程序中执行的逻辑所需的时间相比。重要的区别是:

  • Timers.Timer和Threading.Timer从单独的Threading.ThreadPool线程中引发事件。
  • Forms.Timer从UI线程中引发事件。
  • Timers.Timer可以作为组件放置在表单上。
  • Forms.Timer具有更友好的用户界面。

挑选另一个取决于您的需求。如果您对计时器已过去事件的响应是一种后台作业必须独立于UI发生,那么您将需要Timers.Timer或Threading.Timer。如果您对计时器过去事件的响应是某种视觉反馈,那么您将需要Forms.Timer。

就个人而言,我会创建一个自定义计时器抽象/接口,并基于.NET计时器创建三个实现。理论上,这将允许您在不对代码进行任何更改的情况下在不同类型的计时器之间切换。