亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > .NET > 正文

.NET Framework中定時器timer的單線程與多線程使用講解

2024-07-10 13:30:25
字體:
來源:轉載
供稿:網友
這篇文章主要介紹了.NET Framework中定時器timer的單線程與多線程使用講解,單線程定時器在性能方面不如多線程,但是可以做到線程安全,需要的朋友可以參考下
 

如果你需要使用規律的時間間隔重復執行一些方法,最簡單的方式是使用定時器(timer)。與下邊的例子相比,定時器可以便捷、高效地使用內存和資源:

new Thread (delegate() {             while (enabled)             {              DoSomeAction();              Thread.Sleep (TimeSpan.FromHours (24));             }            }).Start();

這不僅僅會永久占用一個線程,而且如果沒有額外的代碼,DoSomeAction每天都會發生在更晚的時間。定時器解決了這些問題。

.NET Framework 提供了 4 種定時器。下邊兩個類是通用的多線程定時器:

(1)System.Threading.Timer
(2)System.Timers.Timer
另外兩個是專用的單線程定時器:

(3)System.Windows.Forms.Timer (Windows Forms 的定時器)
(4)System.Windows.Threading.DispatcherTimer (WPF 的定時器)
多線程定時器更加強大、精確并且更加靈活,而單線程定時器對于一些簡單的更新 Windows Forms 和 WPF 控件的任務來說是安全的,并且更加便捷。

1.多線程定時器Permalink

System.Threading.Timer是最簡單的多線程定時器:它僅僅有一個構造方法和兩個普通方法(取悅于極簡主義者,還有本書作者!)。在接下來的例子中,一個定時器在 5 秒鐘之后調用Tick方法來打印 “ tick… “,之后每秒打印一次直到用戶按下回車鍵:

using System;using System.Threading;class Program{ static void Main() {  // 首次間隔 5000ms,之后間隔 1000ms  Timer tmr = new Timer (Tick, "tick...", 5000, 1000);  Console.ReadLine();  tmr.Dispose();     // 停止定時器并執行清理工作 } static void Tick (object data) {  // 這里運行在一個線程池線程上  Console.WriteLine (data);     // 打印 "tick..." }}

之后可以通過調用Change方法來改變定時器的時間間隔。如果你希望定時器只觸發一次,可以指定Timeout.Infinite作為構造方法的最后一個參數。

.NET Framework 在System.Timers命名空間下提供了另一個名字相同的定時器類。它只是封裝了 System.Threading.Timer,并在使用完全相同的底層引擎的前提下提供額外的便利。下面是增加功能的簡介:

(1)實現了Component,允許用于 Visual Studio 的設計器中。
(2)Interval屬性代替了Change方法。
(3)Elapsed事件代替了回調委托。
(4)Enabled屬性用于開始或停止定時器(默認值是false)。
(5)Start和Stop方法,避免對Enabled屬性感到困惑。
(6)AutoReset標識來指定是否為可重復的事件(默認為true)。
SynchronizingObject屬性提供Invoke和BeginInvoke方法,用于在 WPF 和 Windows Forms 控件上安全調用方法。
這有個例子:

using System;using System.Timers;  // 命名空間是 Timers 而不是 Threadingclass SystemTimer{ static void Main() {  Timer tmr = new Timer();    // 無需任何參數  tmr.Interval = 500;  tmr.Elapsed += tmr_Elapsed;  // 使用事件代替委托  tmr.Start();          // 開啟定時器  Console.ReadLine();  tmr.Stop();          // 停止定時器  Console.ReadLine();  tmr.Start();          // 重啟定時器  Console.ReadLine();  tmr.Dispose();         // 永久停止定時器 } static void tmr_Elapsed (object sender, EventArgs e) {  Console.WriteLine ("Tick"); }}

多線程定時器使用線程池來允許少量線程服務多個定時器。這意味著,回調方法或Elapsed事件每次可能會在不同的線程上觸發。此外,不論之前的Elapsed是否完成執行,Elapsed總是幾乎按時觸發。因此,回調方法或事件處理器必須是線程安全的。

多線程定時器的精度依賴于操作系統,通常是在 10-20 ms 的區間。如果需要更高的精度,你可以使用本地互操作(native interop)來調用 Windows 多媒體定時器,可以讓精度提升到 1 ms。它定義在 winmm.dll 中,首先調用timeBeginPeriod來通知操作系統你需要更高的定時器精度,然后調用timeSetEvent來啟動多媒體定時器。當使用完成后,調用timeKillEvent停止定時器,最后調用timeEndPeriod通知操作系統你不在需要更高的定時器精度了??梢酝ㄟ^搜索關鍵字 dllimport winmm.dll timesetevent 在網上找到完整的例子。

2.單線程定時器Permalink

.NET Framework 提供了兩個定時器,為消除WPF 和 Windows Forms 應用程序的線程安全問題而設計:

System.Windows.Threading.DispatcherTimer(WPF)
System.Windows.Forms.Timer(Windows Forms)
單線程定時器不是被設計成能在其特定的環境外工作的。例如,如果在 Windows 系統服務應用程序中使用 Windows Forms 定時器,Timer事件不會觸發!

它們暴露的成員都像System.Timers.Timer一樣(Interval、Tick、Start和Stop),并且用法也類似。但是不同之處在于其內部是如何工作的。它們不是使用線程池來產生定時器事件,WPF 和 Windows Forms 定時器依賴于 UI 模型的底層消息循環機制(message pumping mechanism)。意味著Tick事件總是在創建該定時器的那個線程觸發,在通常的程序中,它也就是管理所有 UI 元素和控件的那個線程。這有很多好處:

單線程計時器比較安全,對于更新 Windows Forms controls或者WPF這種簡單任務來說更方便。在WPF或Windows Forms中安全的調用方法的SynchronizingObject對象。
單線程計時器是被設計成屬于他們執行環境的計時器,如果你在一個Windows服務應用程序中使用Windows Forms的Timer,timer 事件并不會被觸發,只有在對應的環境下才會被觸發。
像System.Timers.Timer一樣,他們也提供了相同的成員(Interval,Tick,Start,Stop),但是他們內部的工作原理不同,WPF和Windows Forms的計時器使用消息循環機制來取代線程池產生消息的機制。

你可以不必考慮線程安全。
新的Tick在之前的Tick完成執行前不會觸發。
你可以直接在Tick時間事件的處理代碼中更新 UI 控件,而不需要調用Control.Invoke或Dispatcher.Invoke。
這聽起來好的難以置信,直到你意識到使用這些定時器的程序并不是真正的多線程,不會有并行執行。一個線程服務于所有定時器,并且還處理 UI 事件。這帶來了單線程定時器的缺點:

除非Tick事件處理器執行的很快,否則 UI 會失去響應。
這使得 WPF 和 Windows Forms 定時器僅適用于小任務,通常就是那些更新 UI 外觀的任務(例如,顯示時鐘或倒計時)。否則,你就需要多線程定時器。

在精度方面,單線程定時器與多線程定時器類似(幾十毫秒),但是通常精度更低,因為它們會被其它 UI 請求(或其它定時器事件)推遲。

單線程計時器基于Windows消息循環,應用程序會同步的處理計時器的消息。會發現UI界面相應速度比較慢。解決這個問題的方法是使用多線程計時器。
單線程計時器的缺點:除非Tick事件的處理代碼執行的非???,否則UI界面會變得響應很慢。所以 WPF和Windows Forms的計時器都非常適合小任務,尤其是界面更新的任務。例如時鐘和計數顯示。否則,你需要一個多線程計時器



注:相關教程知識閱讀請移步到ASP.NET教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美大胆在线视频| 2018中文字幕一区二区三区| 欧美韩国理论所午夜片917电影| 久久精品国产2020观看福利| 三级精品视频久久久久| 一区二区三区回区在观看免费视频| 欧美一区二区三区艳史| www.欧美视频| 91成人国产在线观看| 亚洲国内高清视频| 国产精品福利在线观看网址| 欧美综合国产精品久久丁香| 91大神在线播放精品| 亚洲欧美另类人妖| 日韩黄色高清视频| 日韩精品视频在线播放| 国产脚交av在线一区二区| 精品久久久久久亚洲国产300| 九九综合九九综合| 国产精品久久久久久av福利| 亚洲成人精品久久久| 北条麻妃在线一区二区| 久久中文久久字幕| 亚洲欧美制服中文字幕| 亚洲免费电影在线观看| 成人午夜激情免费视频| 亚洲第一男人天堂| 97免费中文视频在线观看| 91超碰中文字幕久久精品| 81精品国产乱码久久久久久| 欧美性极品少妇精品网站| 久久精品视频99| 在线观看欧美成人| 日韩电影视频免费| 国产视频久久久| 欧美国产日韩一区二区三区| 日韩有码在线观看| 国产视频精品免费播放| 日韩黄色高清视频| 久久久久久久久亚洲| 日韩欧亚中文在线| 日本欧美国产在线| 欧美www视频在线观看| 中文字幕国产精品| 伊人久久久久久久久久久久久| 久久这里只有精品视频首页| 另类少妇人与禽zozz0性伦| 91亚洲精品久久久久久久久久久久| 在线视频亚洲欧美| 91欧美视频网站| 欧美激情一区二区三区在线视频观看| 欧美大片大片在线播放| 国产精品伦子伦免费视频| 国产精品黄视频| 日韩欧美在线观看| 亚洲福利视频在线| 国产一区二区在线播放| 综合网日日天干夜夜久久| 黄色成人av网| 国产一区视频在线| 亚洲国产成人在线播放| 国产999精品视频| 亚洲国产婷婷香蕉久久久久久| 91九色国产视频| 亚洲天堂色网站| 日韩在线免费视频| 久久久久久久久久亚洲| 亚洲成人在线网| 久久久精品国产一区二区| 欧美大片在线看免费观看| 国产精品白丝jk喷水视频一区| 国产精品日日摸夜夜添夜夜av| 人九九综合九九宗合| 日本欧美在线视频| 精品调教chinesegay| 91精品国产九九九久久久亚洲| 久久不射热爱视频精品| 亚洲爱爱爱爱爱| 国产成人亚洲精品| 成人综合网网址| 欧美多人乱p欧美4p久久| 日韩av在线免播放器| 国产成人综合精品| www国产亚洲精品久久网站| 91九色国产视频| 久久久精品久久久久| 欧美一区视频在线| 欧美日韩ab片| 欧美丝袜第一区| 欧美国产日产韩国视频| 久久天天躁狠狠躁老女人| 日韩成人av在线播放| 一区二区三区回区在观看免费视频| 国产日韩在线观看av| 奇米一区二区三区四区久久| 欧美日韩亚洲成人| 91手机视频在线观看| 国产精品视频色| 91爱爱小视频k| 亚洲欧洲高清在线| 亚洲国产精品成人精品| 国产精品com| 欧美中文在线观看| 久久国产精品久久久久久久久久| 欧美午夜激情视频| 黄色精品一区二区| 欧美高清激情视频| 高清在线视频日韩欧美| 久久精品中文字幕一区| 黑人精品xxx一区一二区| 日韩一二三在线视频播| 日韩精品中文字幕有码专区| 欧美激情一二三| 亚洲精品成人久久| 这里只有精品视频在线| 日韩电影中文字幕av| 成人黄色大片在线免费观看| 亚洲天堂av图片| 欧美日韩性视频在线| 九九精品在线观看| 日韩高清电影免费观看完整版| 国产视频精品一区二区三区| 视频一区视频二区国产精品| 91精品在线观| 国产成+人+综合+亚洲欧美丁香花| 精品久久久久久久久国产字幕| 成人免费视频a| 久久国产精品网站| 国产精品美女久久久久久免费| 日本不卡高字幕在线2019| 91亚洲国产成人久久精品网站| 国产成人鲁鲁免费视频a| 国产精品福利久久久| 成人久久一区二区三区| 国产精品成人va在线观看| 日韩av在线导航| 色婷婷久久av| 精品国产精品三级精品av网址| 亚洲国产91色在线| 日本欧美精品在线| 欧美精品久久久久a| 欧美激情18p| 亚洲欧美自拍一区| 亚洲xxx自由成熟| 国产精品免费福利| 96sao精品视频在线观看| 日韩精品中文字幕久久臀| 亚洲综合成人婷婷小说| 欧美一区二粉嫩精品国产一线天| 91精品啪aⅴ在线观看国产| 久久久99久久精品女同性| 欧美久久精品午夜青青大伊人| 日韩专区中文字幕| 九九精品视频在线观看| 国产精品久久久久久久久免费| 国产精品久久久久久久久粉嫩av| 国产精品视频999| 96pao国产成视频永久免费| 成人免费视频在线观看超级碰| 国产亚洲欧美另类中文| 日韩中文字幕在线| 日韩中文字幕视频在线| 国产欧美日韩中文字幕在线| 久久精品人人爽|