我想在用C#编写的简单.NET应用程序中使用定时器。我能找到的唯一一个是Windows.Forms.Timer类。我不想为控制台应用程序引用这个命名空间。
是否有适用于控制台应用程序的类似定时器的C#定时器?
我想在用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。
需要注意的一点是(如果你之前没有这样做过),比如说你已经在使用命名空间中包含了 System.Threading
,但实际上你想要使用 System.Timers
中的计时器,你需要这样做:
using System.Threading;
using Timer = System.Timers.Timer;
Jon Skeet在他的多线程指南中有一篇关于计时器的文章,非常值得一读: https://jonskeet.uk/csharp/threads/timers.html
这个问题是老旧的,现有的答案在当时涵盖了很好的问题。与此同时,发生了一些新的事情。
使用定时器是一种以延迟和/或定期间隔运行处理的方式。有两种情况:
(1) 它只是定期运行一些简短的代码而不涉及线程问题,没有麻烦,不会出错。如果普通的Windows窗体计时器不适用,则通过其SynchronizingObject
属性,System.Timers.Timer
比System.Threading.Timer
更为简单。
(2) 你所编写的内容属于异步并发处理的范畴。这传统上容易出错、难以调试、无论使用何种普通计时器都很难正确实现。
对于第2种情况,您可能会采用传统方法,但请注意,复杂性潜伏并准备随时吞噬您,除非您不止一次地做出最佳选择,并产生累积效应。
如果您的情况涉及某种“事件”处理(无论它是如何编码的:键按下、鼠标按钮、来自串行端口、来自网络连接、来自测量等),您应该考虑反应式编程。
响应式编程在最近几年中以某种方式揭示了如何为这些情况编写代码,同时不会陷入复杂性陷阱。
因此,从技术上讲,以下链接是对问题的答案:它是位于System.Reactive.Linq
命名空间中的计时器:Observable.Timer Method (System.Reactive.Linq)。
公平地说,这是一个计时器,它与响应式编程思维方式相得益彰,并且有很多改变游戏规则的东西。但是根据上下文,它可能是最好的工具,也可能不是。
由于这个问题是.NET为中心的,您可能会对.NET响应式框架的良好介绍感兴趣。
或者,对于一个清晰、图解、更一般(非微软为中心)的文档,这似乎很好你一直缺少的响应式编程介绍。
System.Timers.Timer
而不是System.Threading.Timer
。这足以点击“无用”吗?无论如何,经过5年的StackExchange实践,我的水平得到了提高。我想这个问题已经解决了,我们都在进步。再次感谢您的解释。 - Stéphane Gourichon建议不要使用 System.Timer
的 Timer 类。
System.Diagnostics.Stopwatch 如果你的目标是计算某个操作运行所需的时间