我想问一个System.Timers.Timer
实例是否在单个线程,线程池或其他东西上运行?
如果它确实在单个线程上运行,您认为对于此示例最好的是什么:
我应该在一个单独的线程上运行它们,在一个单独的事件上运行它们,还是在一个线程中运行所有那些必须检查时差?
答案 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
答案 3 :(得分:0)
我应该在一个单独的线程上运行它们,在一个单独的事件上运行它们,或者在一个线程中运行所有那些必须检查时间差异。
在我看来,你应该使用三个计时器。三是一个不应该以负面方式影响表现的数字。
计算时差时的一大缺点是时间变化(夏令时,与互联网同步)。
您必须使用Environment.TickCount
。