.NET - System.Timers.Timer问题

时间:2009-12-22 04:38:42

标签: c# .net timer

我想问一个System.Timers.Timer实例是否在单个线程,线程池或其他东西上运行?

如果它确实在单个线程上运行,您认为对于此示例最好的是什么:

  • 我想每分钟更新所有角色的健康状况
  • 我想每2秒更新一次角色的能量
  • 我想每40秒更新所有角色的特价

我应该在一个单独的线程上运行它们,在一个单独的事件上运行它们,还是在一个线程中运行所有那些必须检查时差?

4 个答案:

答案 0 :(得分:2)

我将从单个计时线程运行所有操作并计算时间差。通过这种方式,我可以在不实例化更多计时器的情况下运行尽可能多的操作。

同步在同一时间间隔发生的动作也更容易。

答案 1 :(得分:1)

来自http://msdn.microsoft.com/en-us/library/system.timers.aspx

  

基于服务器的Timer专为   与工作线程一起使用   多线程环境。服务器   计时器可以在线程之间移动   处理凸起的Elapsed事件,   导致更准确   Windows计时器提升事件   时间。

答案 2 :(得分:0)

System.Timers.Timer elapsed事件使用Threadpool。因此,如果间隔较小(并且经过事件>间隔需要很长时间才能完成),则可以调用多个线程。 Threadpool在后台运行,UI更新无法在Windows应用程序的UI线程外完成。不过,您可以使用Control.Invoke Control.BeginInvoke

Link

Timers

difference between invoke and begininvoke

答案 3 :(得分:0)

  

我应该在一个单独的线程上运行它们,在一个单独的事件上运行它们,或者在一个线程中运行所有那些必须检查时间差异。

在我看来,你应该使用三个计时器。三是一个不应该以负面方式影响表现的数字。

计算时差时的一大缺点是时间变化(夏令时,与互联网同步)。 您必须使用Environment.TickCount