国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 編程 > .NET > 正文

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

2024-07-10 12:47:14
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

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

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

這不僅僅會(huì)永久占用一個(gè)線程,而且如果沒(méi)有額外的代碼,DoSomeAction每天都會(huì)發(fā)生在更晚的時(shí)間。定時(shí)器解決了這些問(wèn)題。

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

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

(3)System.Windows.Forms.Timer (Windows Forms 的定時(shí)器)
(4)System.Windows.Threading.DispatcherTimer (WPF 的定時(shí)器)
多線程定時(shí)器更加強(qiáng)大、精確并且更加靈活,而單線程定時(shí)器對(duì)于一些簡(jiǎn)單的更新 Windows Forms 和 WPF 控件的任務(wù)來(lái)說(shuō)是安全的,并且更加便捷。

1.多線程定時(shí)器Permalink

System.Threading.Timer是最簡(jiǎn)單的多線程定時(shí)器:它僅僅有一個(gè)構(gòu)造方法和兩個(gè)普通方法(取悅于極簡(jiǎn)主義者,還有本書(shū)作者!)。在接下來(lái)的例子中,一個(gè)定時(shí)器在 5 秒鐘之后調(diào)用Tick方法來(lái)打印 “ 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();     // 停止定時(shí)器并執(zhí)行清理工作 } static void Tick (object data) {  // 這里運(yùn)行在一個(gè)線程池線程上  Console.WriteLine (data);     // 打印 "tick..." }}

之后可以通過(guò)調(diào)用Change方法來(lái)改變定時(shí)器的時(shí)間間隔。如果你希望定時(shí)器只觸發(fā)一次,可以指定Timeout.Infinite作為構(gòu)造方法的最后一個(gè)參數(shù)。

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

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

using System;using System.Timers;  // 命名空間是 Timers 而不是 Threadingclass SystemTimer{ static void Main() {  Timer tmr = new Timer();    // 無(wú)需任何參數(shù)  tmr.Interval = 500;  tmr.Elapsed += tmr_Elapsed;  // 使用事件代替委托  tmr.Start();          // 開(kāi)啟定時(shí)器  Console.ReadLine();  tmr.Stop();          // 停止定時(shí)器  Console.ReadLine();  tmr.Start();          // 重啟定時(shí)器  Console.ReadLine();  tmr.Dispose();         // 永久停止定時(shí)器 } static void tmr_Elapsed (object sender, EventArgs e) {  Console.WriteLine ("Tick"); }}            
發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 和政县| 太原市| 唐河县| 容城县| 长泰县| 高密市| 和顺县| 科技| 忻城县| 抚松县| 眉山市| 科尔| 子洲县| 丹巴县| 秦皇岛市| 神农架林区| 芷江| 秭归县| 庆云县| 肃宁县| 新泰市| 饶阳县| 泌阳县| 琼结县| 苏尼特左旗| 邓州市| 襄樊市| 错那县| 乌苏市| 霍林郭勒市| 新乐市| 鸡泽县| 濉溪县| 南京市| 太白县| 克什克腾旗| 德昌县| 玉门市| 中阳县| 蓝山县| 安乡县|