timer - System.Timers.Timer vs System.Threading.Timer

  显示原文与译文双语对照的内容

我刚才看了下其中一些可能的计时器较晚,该 Threading.TimerTimers.Timer 一些的那些看起来往往需要使用我( 因为它们支持线程池) 。

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

那将是最好的?

时间:

在书"通过 C# CLR"中,Ritcher 不使用 System.Timers.Timer,这个计时器是从 System.ComponentModel.Component 派生的,允许它在 Visual Studio的设计图面上使用。 所以只有当你想在设计图面上有定时器时才有用。

他喜欢在线程池线程上使用 System.Threading.Timer 进行后台任务。

System.Threading.Timer 是一个普通定时器。

在一个特定 thread, System.Timers.Timer 是一个 System.ComponentModel.Component,进行包装,一个用于 dispatching. System.Threading.Timer,并提供一些额外的功能

在那个HWNDs消息 loop, System.Windows.Forms.Timer 而不是包装一个本机 message-only-HWND 并使用计时器 窗口来提高 events.ear

如果你的应用程序没有用户界面,并且你想要尽可能多的light-weight和通用. NET 定时器,那么( 因为你很高兴找出自己的线程/分派) 就像它在框架中得到的一样好。

我并不完全清楚'不是线程安全的'的问题是什么。 可能与这里问题中的要求相同: Thread-safety System.Timers.Timer vs System.Threading.Timer,或者每个人都意味着:

  1. 使用计时器时,编写争用条件很容易。 比如 查看这个问题:计时器( 系统。线程处理) 线程安全

  2. 定时器通知,在那里你的计时器事件可以触发,然后打电话给你一个 re-entrancy 第二 首先时间在测试结束前处理的事件。 使用 System.Threading.Timer 和监视器, 比如 看到这一问题: Thread-safe执行

我在 MSDN 中找到了一个简短的比较

.NET 框架类库包括四个名为Timer的类,每个类提供不同的功能:

System.Timers.Timer,它触发一个事件并定期执行一个或者多个事件接收器中的代码。 类用作多线程环境中的server-based或者服务组件;它没有用户界面,在运行时不可见。

System.Threading.Timer,它定期在线程池线程上执行单个回调方法。 当计时器被实例化且无法更改时,定义了回调方法。 System.Timers.Timer 类一样,这个类用于多线程环境中的server-based或者服务组件;它没有用户界面,在运行时不可见。

System.Windows.Forms.Timer,一个 Windows 窗体组件,它触发事件并定期执行一个或者多个事件接收器中的代码。 组件没有用户界面,设计用于single-threaded环境。

System.Web.UI.Timer,一个 ASP.NET 组件,它定期执行异步或者同步网页回发。

...