我想在用C#编写的简单.NET应用程序中使用计时器。我能找到的唯一一个是Windows.Forms.Timer类。我不想仅为我的控制台应用程序引用此命名空间。
是否有用于控制台应用程序的C#计时器(或类似计时器)类?
答案 0 :(得分:29)
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
答案 1 :(得分:15)
我建议在Timer
命名空间中使用System.Timers
类。同样感兴趣的是Timer
命名空间中的System.Threading
类。
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文档的示例。
答案 2 :(得分:8)
我至少知道System.Timers.Timer和System.Threading.Timer个类。
有一件事需要注意(如果你之前没有这样做过),请说你的using子句中已经有了System.Threading命名空间,但实际上你想在System.Timers中使用你需要的计时器这样做:
using System.Threading;
using Timer = System.Timers.Timer;
答案 3 :(得分:0)
这个问题很老,现有的答案很好地涵盖了当时的问题。与此同时,发生了一些新的事情。
使用计时器是一种以一定延迟和/或定期间隔运行某些处理的方法。有两种情况:
(1)它只是定期运行一些短代码,没有任何线程关注,没有麻烦,没有混乱。如果普通的Windows窗体计时器不合适,则System.Timers.Timer
及其SynchronizingObject
属性使其比System.Threading.Timer
更简单。
(2)您正在编码的是异步并发处理领域。传统上,这很容易出错,难以调试,无论使用什么普通计时器都能做到正确。
在第二种情况下,你可能会采用传统方法,但要注意,复杂性潜伏着并准备好吃掉你不只是一次,但任何时候你都没有做出最佳选择,累积效应。
如果您的情况涉及某种"事件"处理(无论它的编码方式如何:按键,鼠标按键,串口的字节,网络连接,测量等),你应该考虑反应式编程。
近年来,反应式编程以某种方式揭示了如何为这些情况编码,而不是陷入复杂陷阱。
因此,从技术上讲,以下链接是问题的答案:它是System.Reactive.Linq
命名空间中的计时器:Observable.Timer Method (System.Reactive.Linq)
公平地说,它是一个计时器,可以与Reactive Programming思维模式和许多改变游戏规则的东西一起发挥作用。然而,根据具体情况,它可能是也可能不是最好的工具。
由于此问题以.NET为中心,您可能对Good introduction to the .NET Reactive Framework
感兴趣或者对于一个清晰的,插图化的,更一般的(不是以微软为中心的)文档,这似乎很好The introduction to Reactive Programming you've been missing。
答案 4 :(得分:-2)
System.Diagnostics.Stopwatch如果您的目标是计算运行时间需要多长时间
答案 5 :(得分:-2)
建议不要使用System.Timer
的Timer类。