zoukankan      html  css  js  c++  java
  • .Net中Timers的学习备忘二

    前一篇的备忘记录到了System.Timers.Timer, 本篇将继续第三个Timer也是最推荐使用的Timer:System.Threading.Timer。

    要点四:

    • 不同于前面的两个Timer,System.Threading.Timer, 既没有一个Interval属性,也没有Start和Stop方法,也没有事件可以用来注册。这些相应的设置都放在了构造函数里,也就是说通过构造函数用户需要告诉Timer多长时间以后开始执行;period(即Interval)是多少,调用的Callback等。
    • 前述的Callback会在System.Threading.Timer的工作线程中被调用,因此用户应该注意线程安全的问题。
    • System.Threading.Timer被构造之后,用户仍然可以通过Change函数来设置它的启动时间和循环时间间隔。当把启动时间设成Timeout.Infinite之后,Timer便停止工作。

    要点五:

    • 在多线程程序中,控件的访问是一个要注意的问题。Control.InvokeRequired属性可以用来判断当前线程是否能访问该控件。下面的示意代码显示了一个在线程中访问控件的常用模式:

    要点六:

    • 要留意事件的可重入性(Reentrance),是指在事件处理函数的运行时长大于Timer周期的时候,就发生了多个事件处理函数同时运行的状态,这就有可能造成它们所共享的变量返回错误值的情况。
    • 在读原文章代码时碰到了一个Interlocked类,从来没用过,mark一下。

    最后拷贝一下原文中关于三个Timer的对比表:

      

    System.Windows.Forms

    System.Timers

    System.Threading

    Timer event runs on what thread?

    UI thread

    UI or worker thread

    Worker thread

    Instances are thread safe?

    No

    Yes

    No

    Familiar/intuitive object model?

    Yes

    Yes

    No

    Requires Windows Forms?

    Yes

    No

    No

    Metronome-quality beat?

    No

    Yes*

    Yes*

    Timer event supports state object?

    No

    No

    Yes

    Initial timer event can be scheduled?

    No

    No

    Yes

    Class supports inheritance?

    Yes

    Yes

    No

    * Depending on the availability of system resources (for example, worker threads)

  • 相关阅读:
    【转】Python爬虫(5)_性能相关
    【转】Python爬虫(4)_selenium模块
    【转】Python爬虫(3)_Beautifulsoup模块
    【转】Python爬虫_示例2
    【转】Python爬虫_示例
    linux开机自启动tomcat
    Linux下Tomcat启动,停止命令
    Linux下tomcat启动Neither the JAVA_HOME nor the JRE_HOME environment variable is defined At least one of
    centos7开启关闭80端口
    centos安装JDK
  • 原文地址:https://www.cnblogs.com/lsp/p/1640819.html
Copyright © 2011-2022 走看看