亚洲综合原千岁中文字幕_国产精品99久久久久久久vr_无码人妻aⅴ一区二区三区浪潮_成人h动漫精品一区二区三

主頁 > 知識庫 > .NET Framework中定時器timer的單線程與多線程使用講解

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

熱門標(biāo)簽:地圖定位圖標(biāo)標(biāo)注 塔城代理外呼系統(tǒng) 代理接電話機(jī)器人如何取消 地圖標(biāo)注專業(yè)團(tuán)隊 遂寧市地圖標(biāo)注app 濮陽外呼電銷系統(tǒng)怎么樣 天心智能電銷機(jī)器人 400電話辦理哪家性價比高 地圖標(biāo)注的公司有哪些

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

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

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

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

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

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

1.多線程定時器Permalink

System.Threading.Timer是最簡單的多線程定時器:它僅僅有一個構(gòu)造方法和兩個普通方法(取悅于極簡主義者,還有本書作者?。T诮酉聛淼睦又?,一個定時器在 5 秒鐘之后調(diào)用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();     // 停止定時器并執(zhí)行清理工作
 }

 static void Tick (object data)
 {
  // 這里運行在一個線程池線程上
  Console.WriteLine (data);     // 打印 "tick..."
 }
}

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

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

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

using System;
using System.Timers;  // 命名空間是 Timers 而不是 Threading

class SystemTimer
{
 static void Main()
 {
  Timer tmr = new Timer();    // 無需任何參數(shù)
  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");
 }
}

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

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

2.單線程定時器Permalink

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

System.Windows.Threading.DispatcherTimer(WPF)
System.Windows.Forms.Timer(Windows Forms)
單線程定時器不是被設(shè)計成能在其特定的環(huán)境外工作的。例如,如果在 Windows 系統(tǒng)服務(wù)應(yīng)用程序中使用 Windows Forms 定時器,Timer事件不會觸發(fā)!

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

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

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

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

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

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


您可能感興趣的文章:
  • C#(asp.net)多線程用法示例(可用于同時處理多個任務(wù))
  • .net面向?qū)ο笾嗑€程(Multithreading)及 多線程高級應(yīng)用
  • 使用.Net實現(xiàn)多線程經(jīng)驗總結(jié)
  • .NET Windows 多線程thread編程
  • 一些.NET對多線程異常處理技巧分享
  • asp.net 計劃任務(wù)管理程序?qū)崿F(xiàn),多線程任務(wù)加載
  • c#.net多線程編程教學(xué)——線程同步
  • ASP.NET:一段比較經(jīng)典的多線程學(xué)習(xí)代碼
  • .Net多線程編程(誤用點分析)

標(biāo)簽:婁底 麗江 本溪 宜春 重慶 汕頭 吉林 河南

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《.NET Framework中定時器timer的單線程與多線程使用講解》,本文關(guān)鍵詞  .NET,Framework,中,定時器,timer,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《.NET Framework中定時器timer的單線程與多線程使用講解》相關(guān)的同類信息!
  • 本頁收集關(guān)于.NET Framework中定時器timer的單線程與多線程使用講解的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    国产91精品一区| 免费的黄视频| 国产成人精品综合| 欧美日本国产| 日韩免费片| 成人免费一级毛片在线播放视频| 国产精品自拍一区| 一级毛片视频免费| 精品视频在线看| 欧美激情一区二区三区视频高清| 四虎影视精品永久免费网站| 精品久久久久久中文| 精品国产一区二区三区精东影业| 欧美一级视| 午夜在线亚洲| 在线观看成人网 | 国产91精品一区| 日本在线不卡免费视频一区| 美女免费精品视频在线观看| 九九精品在线播放| 黄视频网站在线看| 美女免费黄网站| 91麻豆国产福利精品| 九九久久国产精品| 成人免费网站久久久| 午夜久久网| 黄视频网站免费观看| 亚洲第一页乱| 久久久久久久男人的天堂| 国产一区二区精品| 国产网站麻豆精品视频| a级黄色毛片免费播放视频| 国产综合91天堂亚洲国产| 99久久精品国产高清一区二区 | 一级毛片视频播放| 久久99爰这里有精品国产| 国产精品1024永久免费视频| 99久久精品国产片| 精品国产亚一区二区三区| 午夜家庭影院| 日本免费区| 日韩av东京社区男人的天堂| 国产极品白嫩美女在线观看看| 国产网站免费视频| 亚洲爆爽| 国产a网| 亚洲天堂免费观看| 国产精品1024永久免费视频 | 成人在免费观看视频国产| 韩国三级香港三级日本三级la| 欧美一级视频免费观看| 青青青草视频在线观看| 日韩在线观看视频黄| 毛片的网站| 九九久久国产精品| 日本乱中文字幕系列| 久草免费在线视频| 99久久精品国产片| 国产高清在线精品一区二区 | 欧美夜夜骑 青草视频在线观看完整版 久久精品99无色码中文字幕 欧美日韩一区二区在线观看视频 欧美中文字幕在线视频 www.99精品 香蕉视频久久 | 中文字幕一区二区三区精彩视频 | 四虎影视久久久免费| 国产成人精品综合| 日本特黄特黄aaaaa大片| 国产精品1024永久免费视频 | 精品国产一区二区三区国产馆| 九九精品久久久久久久久| 日韩免费片| 久久国产精品只做精品| 欧美夜夜骑 青草视频在线观看完整版 久久精品99无色码中文字幕 欧美日韩一区二区在线观看视频 欧美中文字幕在线视频 www.99精品 香蕉视频久久 | 久久国产精品自线拍免费| 美女免费精品高清毛片在线视| 天天色色网| 久久国产精品只做精品| 天天做人人爱夜夜爽2020| 四虎影视久久久免费| 国产视频在线免费观看| 国产不卡在线观看| 久久久久久久免费视频| 好男人天堂网 久久精品国产这里是免费 国产精品成人一区二区 男人天堂网2021 男人的天堂在线观看 丁香六月综合激情 | 可以免费在线看黄的网站| 美女免费毛片| 成人免费观看的视频黄页| 国产激情一区二区三区| 欧美激情一区二区三区视频高清| 黄视频网站在线观看| 色综合久久天天综合| 国产综合91天堂亚洲国产| 久久精品欧美一区二区| 国产视频一区二区三区四区| 国产网站免费视频| 国产欧美精品| 国产综合91天堂亚洲国产| 日本免费看视频| 亚洲第一视频在线播放| 91麻豆精品国产自产在线观看一区| 国产不卡高清在线观看视频| 精品久久久久久中文字幕2017| 国产视频一区二区在线播放| 日韩一级黄色片| 欧美一区二区三区在线观看| 亚欧成人乱码一区二区| 91麻豆精品国产高清在线| 99色吧| 一级女人毛片人一女人| 成人免费网站久久久| 天天做日日爱| 欧美电影免费看大全| 国产网站在线| 亚洲爆爽| 国产伦久视频免费观看视频| 国产a网| 国产亚洲精品aaa大片| 午夜精品国产自在现线拍| 国产伦理精品| 中文字幕一区二区三区 精品| 精品国产一区二区三区免费| 在线观看导航| 精品视频在线观看一区二区| 国产一区二区福利久久| 欧美另类videosbestsex视频| 成人免费观看男女羞羞视频| 精品视频在线看| 免费一级片在线观看| 欧美国产日韩精品| 九九干| 四虎影视库国产精品一区| 可以免费看毛片的网站| 九九久久国产精品| 一本高清在线| 国产一级强片在线观看| 99久久精品国产高清一区二区| 99色视频在线观看| a级黄色毛片免费播放视频| 国产高清在线精品一区二区| 日韩一级黄色| 麻豆系列 在线视频| 可以免费看毛片的网站| 日韩在线观看免费完整版视频| 黄色免费网站在线| 91麻豆精品国产自产在线| 青青青草影院| 国产一区二区精品在线观看| 国产一区免费观看| 黄视频网站在线观看| 久久99中文字幕| 国产高清在线精品一区二区| 美女免费精品视频在线观看| 国产视频一区二区在线播放| 精品美女| 国产伦理精品| 国产a网| 国产福利免费观看| 久久精品大片| 久久国产精品永久免费网站| 一级毛片视频免费| 久久久久久久男人的天堂| 亚洲不卡一区二区三区在线 | 美女免费精品高清毛片在线视| 日本在线不卡视频| 国产视频久久久久| 亚久久伊人精品青青草原2020| 四虎影视精品永久免费网站| 国产精品免费久久| 亚洲第一页乱| 麻豆网站在线免费观看| 99久久精品国产高清一区二区| 韩国妈妈的朋友在线播放| 一a一级片| 国产综合成人观看在线| 国产不卡在线播放| 麻豆网站在线免费观看| 国产成人啪精品| 欧美激情一区二区三区中文字幕| 欧美激情一区二区三区中文字幕| 久久精品店| 91麻豆爱豆果冻天美星空| 精品国产亚一区二区三区| 免费国产在线视频| 九九免费高清在线观看视频| 日本在线www| 青青久久精品| 亚洲www美色| 91麻豆精品国产高清在线| 91麻豆国产级在线| 99热精品在线| 好男人天堂网 久久精品国产这里是免费 国产精品成人一区二区 男人天堂网2021 男人的天堂在线观看 丁香六月综合激情 | 中文字幕一区二区三区精彩视频 | 日本免费区| 亚欧成人乱码一区二区| 久久国产精品永久免费网站| 亚洲爆爽| 国产精品1024永久免费视频| 国产韩国精品一区二区三区| 日韩avdvd| 一a一级片| 黄色短视屏| 成人a大片高清在线观看| 欧美国产日韩在线| 免费一级片在线观看|