C# C语言中是否有一个计时器类不是';Windows.Forms命名空间中的t?

C# C语言中是否有一个计时器类不是';Windows.Forms命名空间中的t?,c#,.net,scheduling,timer,C#,.net,Scheduling,Timer,我想在用C编写的简单应用程序中使用计时器。我唯一能找到的是Windows.Forms.Timer类。我不想仅为控制台应用程序引用此命名空间 控制台应用程序中是否有C#timer(或类似计时器的)类?System.Timers.timer 正如MagicKat所说: 系统线程计时器 您可以在这里看到不同之处: 您可以在这里看到MSDN示例: 在这里: 我建议使用名称空间中的类。同样令人感兴趣的是命名空间中的类 using System; using System.Timers; public

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

控制台应用程序中是否有C#timer(或类似计时器的)类?

System.Timers.timer

正如MagicKat所说:

系统线程计时器

您可以在这里看到不同之处:

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

在这里:

我建议使用名称空间中的类。同样令人感兴趣的是命名空间中的类

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.Timer
的Timer类。

我知道至少有和类

但有一件事需要注意(如果您以前没有这样做过),比如您已经在using子句中拥有System.Threading命名空间,但实际上您希望在System中使用计时器。计时器您需要这样做:

using System.Threading;
using Timer = System.Timers.Timer;
Jon Skeet在他的多线程指南中有一篇关于计时器的文章,值得一读:

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

定时器,当然,为什么? 使用计时器是一种以一定延迟和/或固定间隔运行某些处理的方法。有两种情况:

(1) 它只是周期性地运行一些短代码,没有任何线程问题,没有麻烦,没有混乱。如果普通Windows窗体计时器不适用,则带有
SynchronizingObject
属性的
System.Timers.timer
System.Threading.timer
更简单

(2) 您所编写的代码属于异步并发处理领域。这在传统上是容易出错的,无论使用什么简单的计时器,都很难调试和正确操作

在案例2中,你可能会用传统的方法逃脱惩罚,但要注意,复杂性潜伏着,随时可能吃掉你,不仅仅是一次,而是任何时候,只要你没有做出最佳选择,就会产生累积效应

现在我们有了更好的东西

如果你的情况涉及某种“事件”处理(无论它被编码的方式:按键、鼠标按钮、串行端口的字节、网络连接、测量等),你都应该考虑反应式编程。 近年来,反应式编程以某种方式揭示了如何为这些情况编写代码,同时又不会陷入复杂性陷阱

因此,从技术上讲,以下链接是对这个问题的回答:它是
System.Reactive.Linq
命名空间中的计时器:

公平地说,这是一个计时器,它与反应式编程思维和许多改变游戏规则的东西配合得很好。然而,它可能是也可能不是最好的工具,这取决于上下文

因为这个问题是以.NET为中心的,所以您可能对


或者,对于一个清晰、有插图、更通用(而不是以Microsoft为中心)的文档,这似乎很好。

这确实回答了问题,但谈论的是“最小”。Spoon的答案要好得多。这不是计时器,它允许您测量特定代码块的执行情况,但与计时器的作用不同。带有反应式框架介绍链接的注释比这样的答案更适合作为OP/未来读者的提示。@Sinatr我不明白您的理由,您能详细说明吗?第一部分回答了问题,所以这是一个实际的答案。作为奖励,第二部分暗示了其他可能解决著名“”的实例的工具。你的意思是第二部分使整个答案无效吗?你什么意思?我知道。支持其他技术的单词和链接太多。应该在“反应式框架如何优于X”或类似问题中发布。想象一个关于a的问题,回答“不要做a,做B”。除非您清楚地识别出XY问题(在这里我们并没有,控制台应用程序和计时器完全正常),否则您不应该在问题提出7年后这样回答。若你们在评论中提到X,OP回复“这看起来很有希望,你们能告诉我更多关于X和我的问题吗?”,那个么答案会更合理(你们可以在回答中引用OP的评论)。5年内的零投票证明了我的观点,不是吗?谢谢@Sinatr。我想我现在得到了你的第一个评论。我同意我回答的第二部分有点“隐藏”/“稀释”第一部分。第一部分仍然在对话中添加了一些内容,我推荐
System.Timers.Timer
over
System.Threading.Timer
。点击“无用”就足够了吗?无论如何,5年后,我的StackExchange实践有所改进。我想这件事已经解决了,我们都取得了进展。再次感谢你的解释。