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

c#各種Timer類的區(qū)別與用法介紹

 更新時間:2013年10月22日 10:18:13   作者:  
System.Threading.Timer 是一個簡單的輕量計時器,它使用回調(diào)方法并由線程池線程提供服務。在必須更新用戶界面的情況下,建議不要使用該計時器,因為它的回調(diào)不在用戶界面線程上發(fā)生

System.Threading.Timer 是一個簡單的輕量計時器,它使用回調(diào)方法并由線程池線程提供服務。在必須更新用戶界面的情況下,建議不要使用該計時器,因為它的回調(diào)不在用戶界面線程上發(fā)生。在此類情況下,System.Windows.Threading.DispatcherTimer 是更好的選擇,因為其事件是在用戶界面線程上引發(fā)的。
多線程計時器
1:System.Threading.Timer
2:System.Timers.Timer

特殊目的的單線程計時器:
1:System.Windows.Forms.Timer(Windows Forms Timer)
2:System.Windows.Threading.DispatcherTimer(WPF timer);

多線程計時器比較強大,精確,而且可擴展性強;
單線程計時器比較安全,對于更新 Windows Forms controls或者WPF這種簡單任務來說更方便。

復制代碼 代碼如下:

System.Threading.Timer是最簡單的多線程計時器。在下面的例子中,定時器在5秒后開始定時1秒的調(diào)用Tick方法。
publicstaticvoidMain()
{
//5秒后開始運行,接著每隔1秒的調(diào)用Tick方法
Timertmr=newTimer(Tick,"tick...",5000,1000);
Console.ReadLine();
tmr.Dispose();
}
staticvoidTick(objectdata)
{
Console.WriteLine(data);
}

.net framework提供的另一個計時器System.Timers.Timer.簡單的對System.Threading.Timer進行了包裝。增加了下面幾個特性。

實現(xiàn)了Component,所以可以在設計器顯示。代替Change方法的一個Interval屬性代替callback委托的一個Elapsed事件啟動和停止timer的Enabled屬性,默認是false。為了避免Enabled造成混亂,提供了Start和Stop方法。是否在每次指定的間隔結束時引發(fā)Elapsed時間,還是僅間隔第一次結束后運行的AutoReset屬性。在WPF或Windows Forms中安全的調(diào)用方法的SynchronizingObject對象。publicstaticvoidMainThread()

復制代碼 代碼如下:

{
Timertmr=newTimer();
tmr.Interval=500;
tmr.Elapsed+=newElapsedEventHandler(tmr_Elapsed);
tmr.Start();
Console.ReadLine();
tmr.Stop();
Console.ReadLine();
tmr.Start();
Console.ReadLine();
tmr.Dispose();
}

staticvoidtmr_Elapsed(objectsender,ElapsedEventArgse)
{
Console.WriteLine("Tick...");
}


單線程計時器:
1:System.Windows.Forms.Timer(Windows Forms Timer)
2:System.Windows.Threading.DispatcherTimer(WPF timer);

單線程計時器是被設計成屬于他們執(zhí)行環(huán)境的計時器,如果你在一個Windows服務應用程序中使用Windows Forms的Timer,timer 事件并不會被觸發(fā),只有在對應的環(huán)境下才會被觸發(fā)。

像System.Timers.Timer一樣,他們也提供了相同的成員(Interval,Tick,Start,Stop),但是他們內(nèi)部的工作原理不同,
WPF和Windows Forms的計時器使用消息循環(huán)機制來取代線程池產(chǎn)生消息的機制。
這意味著Tick事件總是在創(chuàng)建timer的那個線程上執(zhí)行,同時也意味著如果上一個Tick消息還未被處理,即使時間超過了間隔時間,在消息循環(huán)中也只存在一個Tick消息。

下面是它們的優(yōu)點:
你可以忘記線程安全。一個Tick事件在前一個Tick事件被處理完畢前不會被觸發(fā)。你可以直接在Tick事件處理代碼中更新控件,不需要調(diào)用Control.Invoke或Dispatcher.Invoke.
看下在Winform中使用單線程定時器的效果:

復制代碼 代碼如下:

//基于Windows消息循環(huán)的單線程計時器
privateSystem.Windows.Forms.Timertimer=newTimer(){};

publicForm1()
{
InitializeComponent();

timer.Tick+=newEventHandler(timer_Tick);
timer.Enabled=true;
}

voidtimer_Tick(objectsender,EventArgse)
{
//模擬的做一些耗時的操作
System.Threading.Thread.Sleep(2000);
}


如果運行上面的代碼,會發(fā)現(xiàn)UI界面響應速度很慢,
原理上面已經(jīng)介紹了:單線程計時器基于Windows消息循環(huán),應用程序會同步的處理計時器的消息。
解決這個問題的方法是使用多線程計時器:只要修改代碼使用多線程計時器即可:
復制代碼 代碼如下:

//使用多線程計時器
privateSystem.Timers.Timertimer=newSystem.Timers.Timer();

publicForm1()
{
InitializeComponent();

timer.Elapsed+=newSystem.Timers.ElapsedEventHandler(timer_Elapsed);
timer.Enabled=true;
}

voidtimer_Elapsed(objectsender,System.Timers.ElapsedEventArgse)
{
//模擬的做一些耗時的操作
System.Threading.Thread.Sleep(2000);
}


上面的例子告訴我們單線程計時器的缺點:
除非Tick事件的處理代碼執(zhí)行的非??欤駝tUI界面會變得響應很慢。
所以 WPF和Windows Forms的計時器都非常適合小任務,尤其是界面更新的任務。例如時鐘和計數(shù)顯示。否則,你需要一個多線程計時器。
設為1000,再設一個變量每次加1.加12次后做你要做的事,這樣就準了.

上面是2種自己使用一下,感覺那個好就可以了。

相關文章

最新評論

长葛市| 平果县| 贵州省| 博客| 永善县| 志丹县| 天气| 沙湾县| 鄂尔多斯市| 康平县| 颍上县| 二连浩特市| 五常市| 丰城市| 阳高县| 东平县| 庄浪县| 海林市| 秀山| 榆社县| 汽车| 台山市| 佛山市| 搜索| 镇宁| 永宁县| 响水县| 沙河市| 安庆市| 房产| 乐清市| 大姚县| 饶阳县| 遵义县| 哈巴河县| 霍城县| 自治县| 南靖县| 乐安县| 镇平县| 胶州市|