zoukankan      html  css  js  c++  java
  • .NET Framework 里的三种Timer

    今天在MSDN上看到一篇文章比较.NET Framework里的三种Timer,下面做一个简单的总结:

    System.Windows.Forms.Timer 

    对于WinfForm 程序而言,这个timer会使用UI thread来触发和处理tick事件,简单试验一下,如果将UI Thread sleep了,那么这段时间将不会有tick触发。

    image

    上图可以看到,中间5秒钟的tick丢失了。

    System.Timers.Timer

    这个timer会启用一个独立的working thread去触发tick事件,但事件的handler还是交给UI thread来处理。当UI thread sleep了,这些tick事件会被暂时存入队列,等待UI thread处理。简单试验一下会发现,当UI Thread sleep了,tick的处理会停止,但当UI thread醒来,这些tick事件会被一次全处理完。

    image

    但有趣的是,对于console应用程序,事件的处理是使用的独立的线程:

    image

    System.Threading.Timer

    这个timer将使用独立的线程来触发tick和处理tick事件,所以如果想在tick触发的时候update UI,就需要做marshal了,因为处理事件的并不是UI thread。

  • 相关阅读:
    事后诸葛亮
    冲刺总结
    Alpha第十天
    Alpha第八天
    Alpha第九天
    Alpha第六天
    Alpha第七天
    Alpha第五天
    Python之pytesseract模块-实现OCR
    Selenium4 IDE初体验
  • 原文地址:https://www.cnblogs.com/k330/p/2434735.html
Copyright © 2011-2022 走看看