最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

.NET中的Timer類型用法詳解

 更新時(shí)間:2014年08月25日 16:26:23   投稿:shichen2014  
這篇文章主要介紹了.NET中的Timer類型用法,較為詳細(xì)的分析了Timer類型在各種環(huán)境下的用法,需要的朋友可以參考下

在.NET FrameWork中有多個(gè)Timer,那么怎么根據(jù)實(shí)際情況進(jìn)行選擇確實(shí)是一個(gè)問題。

總體而言,計(jì)時(shí)器共有以下四種:

多線程計(jì)時(shí)器:

1 System.Threading.Timer
2 System.Timers.Timer

特殊環(huán)境的單線程計(jì)時(shí)器:

1 System.Windows.Forms.Timer(使用環(huán)境:Windows Forms Timer)
2 System.Windows.Threading.DispatcherTimer( 使用環(huán)境:WPF timer);

單線程計(jì)時(shí)器比較安全, 因?yàn)檫\(yùn)行在主線程中,對(duì)于更新 Windows Forms或者WPF 中控件的值 這種簡單任務(wù)來說更方便。 例如時(shí)鐘和計(jì)數(shù)顯示。否則,你需要一個(gè)多線程計(jì)時(shí)器。

原理:單線程使用消息循環(huán)機(jī)制,這意味著Tick事件總是在創(chuàng)建timer的那個(gè)線程上執(zhí)行,同時(shí)也意味著如果上一個(gè)Tick消息還未被處理,即使時(shí)間超過了間隔時(shí)間,在消息循環(huán)中也只存在一個(gè)Tick消息。

示例代碼如下:

public static void Main()
{
System.Windows.Forms.Timer tmr = new System.Windows.Forms.Timer();
tmr.Tick += new EventHandler(tmr_Tick);
tmr.Start();//開始計(jì)時(shí)器
tmr.Stop();//停止計(jì)時(shí)器
tmr.Enabled =true;//設(shè)置或獲取計(jì)時(shí)器是否正在運(yùn)行
tmr.Interval = 10000; //計(jì)時(shí)器的時(shí)間間隔 (10秒),以毫秒為單位,在計(jì)時(shí)器事件tmr_Tick開始10秒后進(jìn)行第一次執(zhí)行.
}
void tmr_Tick(object sender, EventArgs e)
{
  //到達(dá)指定時(shí)間間隔應(yīng)處理的代碼
}

當(dāng)tmr_Tick執(zhí)行時(shí)間較長,UI界面會(huì)卡頓,如下圖所示:

多線程計(jì)時(shí)器比較強(qiáng)大,精確,而且可擴(kuò)展性強(qiáng);使用多線程計(jì)時(shí)器時(shí)不會(huì)對(duì)主線程造成任何影響,也就不會(huì)出現(xiàn)上面圖片顯示的情況.

原理:多線程計(jì)時(shí)器使用回調(diào)方法并由線程池線程提供服務(wù).當(dāng)計(jì)時(shí)器間隔小于執(zhí)行此回調(diào)(Tick方法)所需的時(shí)間時(shí),回調(diào)可以同時(shí)在多個(gè)線程中執(zhí)行,比如當(dāng)計(jì)時(shí)器的時(shí)間間隔是5秒,但過了5秒后,上一次的回調(diào)仍未完成,此時(shí)新的回調(diào)將在新的線程中運(yùn)行.在開發(fā)中需要避免此種情況。

System.Threading.Timer是最簡單的多線程計(jì)時(shí)器。
只要在使用 System.Threading.Timer,就必須保留對(duì)它的引用。對(duì)于任何托管對(duì)象,如果沒有對(duì) Timer 的引用,計(jì)時(shí)器會(huì)被垃圾回收。即使 Timer 仍處在活動(dòng)狀態(tài),也會(huì)被回收。
 
在下面的例子中,計(jì)時(shí)器在5秒后開始定時(shí)1秒的調(diào)用Tick方法。

public static void Main()
{
int duetime = 5000;
int period = 1000;
System.Threading.Timer timer = new System.Threading.Timer(Tick,"給Tick方法傳的參數(shù),object類型",duetime ,period );
duetime = 10000;
period = 2000;
//修改等待時(shí)間為10秒和間隔時(shí)間為2秒
timer.Change(duetime, period);
//取消計(jì)時(shí)器
timer.Dispose();
}
static void Tick(object data)
{
 Console.WriteLine(data);
//如果此時(shí)需要訪問控件,因?yàn)榛卣{(diào)線程跟主線程是完全不同的兩個(gè)線各,因此需要使用Control.Invoke或BeginInvoke方法,來實(shí)現(xiàn),例如:
this.BeginInvoke((MethodInvoker)delegate()
{
  this.lbl_w.Text = data.ToString ();
 }); 
}

.net framework提供的另一個(gè)計(jì)時(shí)器System.Timers.Timer.簡單的對(duì)System.Threading.Timer進(jìn)行了包裝。增加了下面幾個(gè)特性:

1.實(shí)現(xiàn)了Component,所以可以在設(shè)計(jì)器顯示。
2.用Interval屬性代替代替Change方法
3.添加了Elapsed事件, 啟動(dòng)和停止timer的Start和Stop方法。
4.添加了AutoReset屬性 默認(rèn)為True 來指定是否在每次指定的間隔結(jié)束時(shí)引發(fā)Elapsed事件,還是僅運(yùn)行一次Elapsed事件就結(jié)束

示例代碼如下:

public static void MainThread()
{
 System.Timers.Timer Timer tmr=new System.Timers.Timer();
 tmr.Interval=500;
 tmr.Elapsed+=newElapsedEventHandler(tmr_Elapsed);
 tmr.AutoReset = false;
 tmr.Start();
 Console.ReadLine();
 tmr.Stop();
 Console.ReadLine();
 tmr.Dispose();
}
void tmr_Elapsed(objectsender,ElapsedEventArgse)
{
 Console.WriteLine("Tick...");
}

結(jié)論:
WPF和Windows Forms的單線程計(jì)時(shí)器都非常適合小任務(wù),尤其是界面更新的任務(wù)。例如時(shí)鐘和計(jì)數(shù)顯示。
否則,你只能使用多線程計(jì)時(shí)器,對(duì)于使用哪一種多線程計(jì)時(shí)器,可根據(jù)自己的需要來決定

希望本文所述對(duì)大家掌握.net中timer的用法有所幫助。

相關(guān)文章

  • 詳解如何通過C#/VB.NET調(diào)整PDF文檔頁邊距

    詳解如何通過C#/VB.NET調(diào)整PDF文檔頁邊距

    PDF邊距是頁面主要內(nèi)容區(qū)域和頁面邊緣之間的距離。與Word頁邊距不同,PDF文檔的頁邊距很難更改。本文將介紹如何在不更改頁面大小的情況下使用C#/VB.NET?代碼調(diào)整PDF文檔的頁邊距,需要的可以參考一下
    2023-04-04
  • C#編程中常見數(shù)據(jù)結(jié)構(gòu)的比較(Unity3D游戲開發(fā))

    C#編程中常見數(shù)據(jù)結(jié)構(gòu)的比較(Unity3D游戲開發(fā))

    在本篇內(nèi)容里我們給大家整理了關(guān)于Unity3D游戲開發(fā)中C#編程中常見數(shù)據(jù)結(jié)構(gòu)的比較相關(guān)知識(shí)點(diǎn)內(nèi)容,需要的朋友們參考下。
    2019-05-05
  • C#裝飾者模式實(shí)例分析

    C#裝飾者模式實(shí)例分析

    這篇文章主要介紹了C#裝飾者模式,是C#中比較常見的設(shè)計(jì)模式,非常具有實(shí)用價(jià)值,需要的朋友可以參考下
    2014-10-10
  • 如何在datagridview中添加button按鈕

    如何在datagridview中添加button按鈕

    這篇文章主要介紹了如何在datagridview中添加button按鈕問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-09-09
  • C# 獲取數(shù)據(jù)庫中所有表名、列名的示例代碼

    C# 獲取數(shù)據(jù)庫中所有表名、列名的示例代碼

    這篇文章主要介紹了C# 獲取數(shù)據(jù)庫中所有表名、列名,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-06-06
  • C#不改變圖像長寬比例調(diào)整圖像大小方式

    C#不改變圖像長寬比例調(diào)整圖像大小方式

    文章介紹了在UI顯示圖片時(shí),當(dāng)容器大小固定而圖片尺寸大于容器時(shí),可以通過編碼計(jì)算長寬來重繪圖像,以確保圖像的長寬比例不變,C#代碼示例展示了如何在Winform前端實(shí)現(xiàn)這一功能
    2025-01-01
  • C#適配器模式的使用

    C#適配器模式的使用

    本文主要介紹了C#適配器模式的使用,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-06-06
  • C#中圖片如何自適應(yīng)pictureBox大小

    C#中圖片如何自適應(yīng)pictureBox大小

    文章描述了如何在C#中實(shí)現(xiàn)圖片自適應(yīng)pictureBox大小,并展示修改前后的效果,修改步驟包括兩步,作者分享了個(gè)人經(jīng)驗(yàn),希望對(duì)大家有所幫助
    2025-01-01
  • 利用C#實(shí)現(xiàn)分割GIF圖片

    利用C#實(shí)現(xiàn)分割GIF圖片

    這篇文章主要為大家詳細(xì)介紹了如何利用C#實(shí)現(xiàn)分割GIF圖片的功能,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)C#有一定的幫助,感興趣的小伙伴可以了解一下
    2022-12-12
  • c#重寫TabControl控件實(shí)現(xiàn)關(guān)閉按鈕的方法

    c#重寫TabControl控件實(shí)現(xiàn)關(guān)閉按鈕的方法

    這是關(guān)于c#重寫TabControl控件實(shí)現(xiàn)關(guān)閉按鈕的例子,整理了一下,與大家分享。
    2013-04-04

最新評(píng)論

兴化市| 汉中市| 阜新| 高碑店市| 开远市| 承德市| 辽中县| 松滋市| 涿州市| 尼玛县| 松滋市| 辽中县| 鲜城| 拉萨市| 天峨县| 广丰县| 通河县| 隆化县| 鲁甸县| 新宁县| 马公市| 阿拉善左旗| 宜兴市| 定西市| 萨迦县| 宜都市| 南部县| 遵义县| 日土县| 克拉玛依市| 喀什市| 大城县| 旌德县| 盈江县| 昭苏县| 综艺| 鄂尔多斯市| 九龙县| 通海县| 施秉县| 桃江县|