婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

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

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

熱門標簽:地圖定位圖標標注 塔城代理外呼系統 代理接電話機器人如何取消 地圖標注專業團隊 遂寧市地圖標注app 濮陽外呼電銷系統怎么樣 天心智能電銷機器人 400電話辦理哪家性價比高 地圖標注的公司有哪些

如果你需要使用規律的時間間隔重復執行一些方法,最簡單的方式是使用定時器(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 而不是 Threading

class 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的計時器都非常適合小任務,尤其是界面更新的任務。例如時鐘和計數顯示。否則,你需要一個多線程計時器


您可能感興趣的文章:
  • C#(asp.net)多線程用法示例(可用于同時處理多個任務)
  • .net面向對象之多線程(Multithreading)及 多線程高級應用
  • 使用.Net實現多線程經驗總結
  • .NET Windows 多線程thread編程
  • 一些.NET對多線程異常處理技巧分享
  • asp.net 計劃任務管理程序實現,多線程任務加載
  • c#.net多線程編程教學——線程同步
  • ASP.NET:一段比較經典的多線程學習代碼
  • .Net多線程編程(誤用點分析)

標簽:婁底 麗江 本溪 宜春 重慶 汕頭 吉林 河南

巨人網絡通訊聲明:本文標題《.NET Framework中定時器timer的單線程與多線程使用講解》,本文關鍵詞  .NET,Framework,中,定時器,timer,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《.NET Framework中定時器timer的單線程與多線程使用講解》相關的同類信息!
  • 本頁收集關于.NET Framework中定時器timer的單線程與多線程使用講解的相關信息資訊供網民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    欧美一区二区啪啪| 欧美一二三区在线观看| 欧美久久久影院| 中文字幕不卡在线播放| 无吗不卡中文字幕| 91久久香蕉国产日韩欧美9色| 国产精品―色哟哟| av在线一区二区| 中文字幕一区二区在线播放| 91久久精品国产91性色tv| 一区二区三区色| 欧美一区日韩一区| 成人国产精品免费| 天天色天天爱天天射综合| 3d成人动漫网站| 欧美日韩精品高清| 国产电影一区二区三区| 中文字幕永久在线不卡| 欧美日韩久久久久久| 丰满亚洲少妇av| 蜜桃91丨九色丨蝌蚪91桃色| 国产专区欧美精品| 久久久久久久久蜜桃| 欧美男同性恋视频网站| 成人免费电影视频| 极品少妇一区二区三区精品视频| 午夜久久久久久久久| 成人开心网精品视频| 欧美日韩精品一区视频| 777午夜精品视频在线播放| 欧美一区二区三区思思人| 日韩中文字幕一区二区三区| 91精品国产品国语在线不卡| 国产电影一区在线| 日产国产欧美视频一区精品 | 精品国产3级a| 日本一区二区在线不卡| 日本一道高清亚洲日美韩| 欧美精品一区男女天堂| 日本高清免费不卡视频| 国产一区二区三区日韩| 亚洲.国产.中文慕字在线| 3d动漫精品啪啪1区2区免费| 欧美一区日本一区韩国一区| 夜夜嗨av一区二区三区中文字幕| 亚洲女爱视频在线| 一区二区三区久久| 欧美一区二区三区四区五区| 日韩西西人体444www| 亚洲精品一区二区精华| 久久久久久久综合日本| 亚洲欧美日韩中文播放 | 亚洲天堂久久久久久久| 国产精品久久久久久久久动漫 | 成人av影视在线观看| 99精品久久只有精品| 日韩精品一区二区三区蜜臀| 美女视频免费一区| 丝袜美腿亚洲色图| 不卡视频在线看| 国产亚洲一区二区三区| 国产九色精品成人porny| 日韩免费性生活视频播放| 国产农村妇女精品| 午夜影院久久久| 国产成人免费视频精品含羞草妖精| 色吊一区二区三区| 国产午夜精品一区二区三区嫩草 | 日本韩国一区二区三区| 欧美乱妇20p| 亚洲精品欧美综合四区| 精一区二区三区| 色屁屁一区二区| 亚洲视频每日更新| 不卡电影一区二区三区| 日韩欧美国产三级电影视频| 一区二区三区日韩| 在线视频一区二区三区| 中文字幕视频一区二区三区久| 久久成人综合网| 5858s免费视频成人| 国产亚洲美州欧州综合国| 毛片不卡一区二区| 色狠狠桃花综合| 亚洲精品视频在线看| 99久久精品一区二区| 亚洲欧美综合色| 成人免费不卡视频| 亚洲人成人一区二区在线观看| 国内精品久久久久影院薰衣草| 精品免费一区二区三区| 青青草原综合久久大伊人精品| 欧美三级午夜理伦三级中视频| 一区二区三区中文字幕精品精品| 国产精一区二区三区| 国产精品午夜春色av| 国产91色综合久久免费分享| 久久精品男人天堂av| 成人免费福利片| 日韩中文欧美在线| 久久久蜜臀国产一区二区| 欧美一区二区三区四区五区| 久久国产麻豆精品| 中文字幕一区二区三区四区不卡| 在线观看一区日韩| 日本va欧美va瓶| 成人欧美一区二区三区视频网页| 在线播放国产精品二区一二区四区 | 9l国产精品久久久久麻豆| 五月激情丁香一区二区三区| 亚洲国产成人av网| 日日摸夜夜添夜夜添国产精品 | av电影一区二区| 亚洲成人综合网站| 国产精品伦一区| 欧美一区二区三级| a美女胸又www黄视频久久| 国产综合久久久久久鬼色 | 91精品国产91久久久久久最新毛片| 国产河南妇女毛片精品久久久 | 欧美一级久久久久久久大片| 成人精品电影在线观看| 美日韩黄色大片| 亚洲自拍偷拍九九九| 欧美激情中文字幕一区二区| 精品国产一区二区在线观看| 成人手机在线视频| 精品一区二区三区免费| 久久电影国产免费久久电影| 美女任你摸久久| 高清av一区二区| 国内成人免费视频| 99国产欧美久久久精品| 91丨九色丨蝌蚪丨老版| 91国在线观看| 欧美一区二区三区人| 日韩精品一区二区三区视频| 国产日韩欧美一区二区三区乱码 | 一区二区在线观看不卡| 亚洲精品乱码久久久久| 亚洲mv在线观看| 免费在线观看日韩欧美| 久久国产免费看| www.日韩精品| 91精品午夜视频| 国产精品午夜电影| 秋霞影院一区二区| 国产精品自产自拍| 亚洲风情在线资源站| 国产日韩欧美综合在线| 中文字幕乱码日本亚洲一区二区| 久久久久国产精品厨房| 亚洲综合成人网| 国产一区在线精品| 高潮精品一区videoshd| 56国语精品自产拍在线观看| 中文字幕免费在线观看视频一区| 国产精品欧美久久久久一区二区 | 亚洲免费观看高清完整| 日本中文在线一区| 成人免费毛片片v| 精品国产a毛片| 日本视频一区二区三区| 国产美女娇喘av呻吟久久| 91亚洲精品久久久蜜桃网站| 精品国免费一区二区三区| 一区二区三区四区高清精品免费观看| 九色|91porny| 精品国产91亚洲一区二区三区婷婷| 亚洲免费在线播放| 日韩有码一区二区三区| 777色狠狠一区二区三区| 国产精品久久夜| 不卡av在线网| 国产精品不卡在线观看| 国产精品羞羞答答xxdd| 久久久精品人体av艺术| 韩国v欧美v亚洲v日本v| 国产网红主播福利一区二区| 国产一区二区剧情av在线| 欧美变态凌虐bdsm| 久久aⅴ国产欧美74aaa| 久久久国产午夜精品| av在线不卡电影| 一区二区在线看| 日韩欧美不卡在线观看视频| 美国十次综合导航| 国产精品免费视频观看| 欧美视频在线播放| 美女一区二区久久| 中文字幕亚洲视频| 精品国产乱码久久久久久久| 色呦呦网站一区| 久久福利资源站| 亚洲女爱视频在线| 日韩免费电影网站| 色婷婷久久一区二区三区麻豆| 欧美日韩三级在线| 国产麻豆成人传媒免费观看| 亚洲精品国产第一综合99久久|