• C#Forms.Timer、Timers.Timer、Threading.Timer的区别


    一、System.Windows.Forms.Timer

    1、基于Windows消息循环,用事件方式触发,在界面线程执行;是使用得比较多的Timer,Timer Start之后定时(按设定的Interval)调用挂接在Tick事件上的EvnetHandler。在这种Timer的EventHandler中可 以直接获取和修改UI元素而不会出现问题--因为这种Timer实际上就是在UI线程自身上进行调用的。

    2、它是一个基于Form的计时器
    3、创建之后,你可以使用Interval设置Tick之间的跨度,用委托(delegate)hook Tick事件
    4、调用Start和Stop方法,开始和停止
    5、完全基于UI线程,因此部分UI相关的操作会在这个计时器内进行
    6、长时间的UI操作可能导致部分Tick丢失

    7、定时器任务执行时间比较长时,不建议使用Forms.Timer,会出现界面假死现象,建议使用Timers.Timer,不会界面假死,并且精度更高!

    二、System.Timers.Timer

    1. 用的不是Tick事件,而是Elapsed事件
    2. 和System.Windows.Forms.Timer一样,用Start和Stop方法
    3. AutoReset属性决定计时器是不是要发起一次事件然后停止,还是进入开始/等待的循环。System.Windows.Forms.Timer没有这个属性
    4. 设置对于UI控件的同步对象(synchronizing object),对控件的UI线程发起事件

    三、System.Threading.Timer
    using System.Threading.Timer;
    属于轻量级计时器,提供以指定的时间间隔执行方法的机制,无法继承此类。

    结论:
    1、定时器中的执行任务比较耗时时,使用Timers.Timer和Threading.Timer更合适;

    2、多线程时,Timers.Timer和Threading.Timer比较,建议使用Timers.Timer。

    3、Forms.Timer适用在任务执行时间较短时使用。否则占用窗体UI线程,导致界面卡死等占用资源的情况。

  • 相关阅读:
    metasploit--multi/samba/usermap_script
    msfcli 不能使用,在新版metasploit不再有效,推荐使用msfconsole
    test.fire渗透测试
    metasploit服务扫描与查点
    Synchronized底层实现
    正在使用的IDEA插件
    JavaWeb
    设计模式
    MySQL
    计算机网络
  • 原文地址:https://www.cnblogs.com/dachuang/p/15667441.html
Copyright © 2020-2023  润新知