首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >System.Timers.Timer vs System.Threading.Timer

System.Timers.Timer vs System.Threading.Timer
EN

Stack Overflow用户
提问于 2009-09-13 03:56:10
回答 9查看 324K关注 0票数 604

我最近一直在检查一些可能的计时器,System.Threading.TimerSystem.Timers.Timer在我看来是必要的(因为它们支持线程池)。

我正在做一个游戏,我计划使用所有类型的事件,不同的时间间隔,等等。

哪一个是最好的?

EN

回答 9

Stack Overflow用户

回答已采纳

发布于 2009-09-13 03:59:28

这篇文章提供了一个相当全面的解释:

"Comparing the Timer Classes in the .NET Framework Class Library“-也可以使用as a .chm file

具体的区别似乎在于,System.Timers.Timer是面向多线程应用程序的,因此通过其SynchronizationObject属性是线程安全的,而具有讽刺意味的是,System.Threading.Timer开箱即用不是线程安全的。

我不认为两者之间有区别,因为这与您的间隔可以有多小有关。

票数 390
EN

Stack Overflow用户

发布于 2014-01-28 23:47:47

System.Threading.Timer是一个普通的定时器。它会在线程池线程上回调(从工作池)。

System.Timers.Timer是一个包装了System.Threading.TimerSystem.ComponentModel.Component,并提供了一些用于在特定线程上调度的附加功能。

相反,System.Windows.Forms.Timer包装了一个本机message-only-HWND,并使用Window Timers在该HWND消息循环中引发事件。

如果您的应用程序没有UI,并且您希望尽可能使用最轻量级和通用的.Net计时器(因为您很乐意弄清楚自己的线程/调度),那么System.Threading.Timer在框架中就是最好的。

我不完全清楚System.Threading.Timer所谓的“不安全线程”问题是什么。也许这和这个问题中的问题是一样的:Thread-safety of System.Timers.Timer vs System.Threading.Timer,或者也许每个人都是这样的意思:

  1. 使用计时器时,很容易编写竞态条件。例如,请看这个问题:定时器通知的Timer (System.Threading) thread safety
  2. re-entrancy,在处理完第一个事件之前,您的定时器事件可以触发并再次回叫您。例如,查看这个问题:Thread-safe execution using System.Threading.Timer and Monitor
票数 187
EN

Stack Overflow用户

发布于 2011-04-12 18:51:57

Jeff Ritcher在他的书"CLR Via C#“中不鼓励使用System.Timers.Timer,这个计时器是从System.ComponentModel.Component派生出来的,允许它在Visual Studio的设计界面中使用。因此,只有当您想在设计图面上使用计时器时,它才有用。

他更喜欢使用System.Threading.Timer来处理线程池线程上的后台任务。

票数 122
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1416803

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档