C# 为什么.NET中有5个版本的计时器类?

C# 为什么.NET中有5个版本的计时器类?,c#,.net,timer,C#,.net,Timer,为什么.Net framework中有五个计时器类,即: System.Timers.Timer System.Threading.Timer System.Windows.Forms.Timer System.Web.UI.Timer System.Windows.Threading.dispatchermer 为什么计时器类有几个版本?它们之间的区别是什么?定时器。定时器在设定的时间间隔后生成事件,并具有生成重复事件的选项 Windows.Forms.Timer是winforms的控件 We

为什么.Net framework中有五个计时器类,即:

  • System.Timers.Timer
  • System.Threading.Timer
  • System.Windows.Forms.Timer
  • System.Web.UI.Timer
  • System.Windows.Threading.dispatchermer

  • 为什么计时器类有几个版本?它们之间的区别是什么?

    定时器。定时器在设定的时间间隔后生成事件,并具有生成重复事件的选项

    Windows.Forms.Timer
    是winforms的控件

    Web.UI.Timer
    以定义的间隔执行异步或同步网页回发

    Threading.Timer
    是回调的计时器。创建用于工作的新线程。由线程池线程提供服务


    所以,这些计时器有不同的用途,也有不同的工具

    以下是对主要计时器的描述,以及我认为最值得注意的要点

    Winforms.Timer

    • UI线程上的勾号不保证在特定时间进行记录
    • 勾号延迟到UI线程空闲
    • 如果UI线程忙,将跳过勾号
    dispatchermer

    • 在UI线程上调用
    • 可以为生成勾号所需的“空闲”级别设置优先级
    • 将跳过滴答声
    Threading.Timer

    • 线程池中工作线程上的记号-没有指定线程的选项
    • 滴答声总是准时发射
    • 不会跳过任何标记-在处理以前的标记时,必须防止出现新的标记
    • 未处理的异常将使应用程序崩溃
    Timers.Timer

    • 环绕线程计时器
    • 从CLR线程池获取的工作线程上的记号
    • 可以通过提供SynchronizationObject强制在特定线程上打勾
    • 滴答声总是准时发射
    • 没有跳过
    • 默默地吃例外

      • 这个问题现在由微软在MSDN文章中为
        system.timers.timer

        小费

        请注意.NET包含四个名为Timer的类,每个类 提供不同的功能:

        System.Timers.Timer
        (本主题):定期触发事件。该类旨在用作基于服务器的服务 多线程环境中的组件;它没有用户界面和 在运行时不可见

        System.Threading.Timer
        :定期对线程池线程执行单个回调方法。回调方法是 在计时器实例化且无法更改时定义。像 System.Timers.Timer类,该类旨在用作 多线程环境中基于服务器的组件或服务组件;信息技术 没有用户界面,在运行时不可见

        System.Windows.Forms.Timer
        (仅限.NET Framework):定期触发事件的Windows窗体组件。该组件具有 没有用户界面,设计用于单线程 环境

        System.Web.UI.Timer
        (仅限.NET Framework):一个ASP.NET组件,它在同一时间执行异步或同步网页回发 定期休息


        实际上有4个计时器类,你忘记了
        System.Windows.Forms.Timer
        System.Web.UI.Timer
        (还有
        System.Windows.Threading.dispatchermer
        ,但它有一个不同的名称…)@ThomasLevesque,谢谢你指出,我更新了这个问题。它们的行为都不同,示例System.Threading.Timer每次滴答声都会生成一个新线程。现在开始:比较.NET Framework类库内容中的计时器类-System.Windows.Forms.Timer-System.Timers.Timer-System.Threading.Timer-使用计时器进行线程安全编程-处理计时器事件重新进入-Conclusion@MitchWheat,我看了一下你提供的问题,它只讨论了5个问题中的2个,因此它不是重复的。滴答声总是准时发射的。“永远”是一个强有力的词。AFAIK需要一个可用的线程池线程,才能按时打勾。