zoukankan      html  css  js  c++  java
  • 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线程,导致界面卡死等占用资源的情况。

  • 相关阅读:
    ipv6现状,加英文的中括号访问, ipv6测试http://test-ipv6.com
    从30岁至35岁:为你的生命多积累一些厚度
    delete
    国内投行的工资
    南京大学行业求职研究报告——投资银行篇
    【oracle案件】ORA-19502,ORA-27072
    多线程第四篇秒杀 一个经典的多线程同步问题
    霍夫的图像处理变换(线检测算法)
    hadoop-ha组态
    央视公然诽谤Linux操作系统,谁报告?
  • 原文地址:https://www.cnblogs.com/dachuang/p/15667441.html
Copyright © 2011-2022 走看看