C#中是否有一个不在Windows.Forms命名空间中的计时器类?

我想在我用C#编写的简单.NET应用程序中使用计时器。 我能找到的唯一一个是Windows.Forms.Timer类。 我不想仅为我的控制台应用程序引用此命名空间。

是否有一个C#计时器(或类似计时器)类用于控制台应用程序?

System.Timers.Timer

正如MagicKat所说:

System.Threading.Timer

你可以在这里看到差异: http : //intellitect.com/system-windows-forms-timer-vs-system-threading-timer-vs-system-timers-timer/

你可以在这里看到MSDN示例:

http://msdn.microsoft.com/en-us/library/system.timers.timer(VS.80).aspx

和这里:

http://msdn.microsoft.com/en-us/library/system.threading.timer(VS.80).aspx

我建议在System.Timers命名空间中使用Timer类。 同样有趣的是, System.Threading命名空间中的Timer类。

 using System; using System.Timers; public class Timer1 { private static Timer aTimer = new System.Timers.Timer(10000); public static void Main() { aTimer.Elapsed += new ElapsedEventHandler(OnTimedEvent); aTimer.Enabled = true; Console.WriteLine("Press the Enter key to exit the program."); Console.ReadLine(); } // Specify what you want to happen when the Elapsed event is // raised. private static void OnTimedEvent(object source, ElapsedEventArgs e) { Console.WriteLine("The Elapsed event was raised at {0}", e.SignalTime); } } 

来自MSDN文档的示例。

至少有我所知道的System.Timers.Timer和System.Threading.Timer类。

有一点需要注意(如果你之前没有这样做过),请说你的using子句中已经有了System.Threading命名空间,但实际上你想在System.Timers中使用计时器,你需要这样做:

 using System.Threading; using Timer = System.Timers.Timer; 

Jon Skeet在他的multithreading指南中有一篇关于Timers的文章,非常值得一读: http : //www.yoda.arachsys.com/csharp/threads/timers.shtml

这个问题是陈旧的,现有的答案很好地涵盖了当时的问题。 与此同时,发生了一些新的事情。

定时器,当然,为了什么?

使用计时器是一种以一些延迟和/或以规则间隔运行某些处理的方法。 有两种情况:

(1)它只是定期运行一些短代码,没有任何线程关注,没有麻烦,没有混乱。 如果普通的Windows窗体计时器不合适,那么System.Timers.Timer及其SynchronizingObject属性使它比System.Threading.Timer更简单。

(2)您编写的是异步并发处理领域。 无论使用什么普通计时器,传统上这都是容易出错,难以调试,正确的。

在第二种情况下,你可能会采用传统的方法,但要注意,复杂性潜伏着并准备好吃掉你不只是一次,但任何时候你都没有做出最佳选择,累积效果。

现在我们有了更好的东西

如果你的情况处理某种“事件”处理(无论它的编码方式如何:按键,鼠标按钮,串口的字节,网络连接,测量等),你应该考虑反应式编程。

近年来,反应式编程以某种方式揭示了如何针对这些情况进行编码,而不是陷入复杂性陷阱。

因此,从技术上讲,以下链接是问题的答案:它是System.Reactive.Linq命名空间中的计时器: Observable.Timer方法(System.Reactive.Linq)

公平地说,它是一个计时器,可以与Reactive Programming思维模式以及许多改变游戏规则的东西一起发挥作用。 然而,取决于具体情况,它可能是也可能不是最好的工具。

由于这个问题是以.NET为中心的,因此您可能对.NET Reactive Framework的良好介绍感兴趣

或者对于一个清晰的,插图化的,更一般的(不是以微软为中心的)文档,这看起来很好。你一直缺少反应式编程的介绍 。

System.Diagnostics.Stopwatch如果你的目标是计算运行多长时间

建议不要使用System.Timer的Timer类。