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示例:
https://msdn.microsoft.com/en-us/library/system.timers.timer(VS.80).aspx
和这里:
https://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类。
上述就是C#学习教程:C#中是否有一个不在Windows.Forms命名空间中的计时器类?分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/1013507.html