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

首頁 > 學院 > 開發設計 > 正文

Forms.Timer、Timers.Timer、Threading.Timer的研究

2019-11-17 02:48:51
字體:
來源:轉載
供稿:網友
Forms.Timer、Timers.Timer、Threading.Timer的研究

.NET Framework里面提供了三種Timer

System.Windows.Forms.Timer

System.Timers.Timer

System.Threading.Timer

一、System.Windows.Forms.Timer

1、基于Windows消息循環,用事件方式觸發,在界面線程執行;是使用得比較多的Timer,Timer Start之后定時(按設定的Interval)調用掛接在Tick事件上的EvnetHandler。在這種Timer的EventHandler中可 以直接獲取和修改UI元素而不會出現問題--因為這種Timer實際上就是在UI線程自身上進行調用的。

2、它是一個基于Form的計時器3、創建之后,你可以使用Interval設置Tick之間的跨度,用委托(delegate)hook Tick事件4、調用Start和Stop方法,開始和停止5、完全基于UI線程,因此部分UI相關的操作會在這個計時器內進行6、長時間的UI操作可能導致部分Tick丟失

例如

C# 代碼 復制
public partial class Form1 : Form 
{ public Form1() { InitializeComponent(); } int num = 0; PRivate void Form_Timer_Tick(object sender, EventArgs e) { label1.Text = (++num).ToString(); Thread.Sleep(3000); } private void button1_Click(object sender, EventArgs e) { Form_Timer.Start(); } private void button2_Click(object sender, EventArgs e) { Form_Timer.Stop(); } } 

實例解析

1、上面這個是一個很簡單的功能,在Form窗體上拖了一個System.Windows.Forms.Timer控件名字為Form_Timer,在屬性窗中把Enable屬性設置為Ture,Interval是定時器的間隔時間。雙擊這個控件就可以看到 Form_Timer_Tick方法。在這個方法中,我們讓她不停的加一個數字并顯示在窗體上,2個按鈕提供了對計時器的控制功能。2、執行的時候你去點擊其他窗體在回來,你會發現我們的窗體失去響應了。因為我們這里使用Thread.Sleep(3000);讓當前線程掛起,而UI失去相應,說明了這里執行時候采用的是單線程。也就是執行定時器的線程就是UI線程。3、Timer 用于以用戶定義的事件間隔觸發事件。Windows 計時器是為單線程環境設計的,其中,UI 線程用于執行處理。它要求用戶代碼有一個可用的 UI 消息泵,而且總是在同一個線程中操作,或者將調用封送到另一個線程。4、在Timer內部定義的了一個Tick事件,我們前面雙擊這個控件時實際是增加了一行代碼this.Form_Timer.Tick += new System.EventHandler(this.Form_Timer_Tick);

然后Windows將這個定時器與調用線程關聯(UI線程)。當定時器觸發時,Windows把一個定時器消息插入到線程消息隊列中。調用線程執行一個消息泵提取消息,然后發送到回調方法中(這里的Form_Timer_Tick方法)。而這些都是單線程進行了,所以在執行回調方法時UI會假死。所以使用這個控件不宜執行計算受限或IO受限的代碼,因為這樣容易導致界面假死,而應該使用多線程調用的Timer。另外要注意的是這個控件時間精度不高,精度限定為 55 毫秒。

二、System.Timers.Timer

1. 用的不是Tick事件,而是Elapsed事件2. 和System.Windows.Forms.Timer一樣,用Start和Stop方法3. AutoReset屬性決定計時器是不是要發起一次事件然后停止,還是進入開始/等待的循環。System.Windows.Forms.Timer沒有這個屬性4. 設置對于UI控件的同步對象(synchronizing object),對控件的UI線程發起事件

例如

C# 代碼 復制
public partial class Form1 : Form 
{ public Form1() { InitializeComponent(); } int num = 0; DateTime time1 = new DateTime(); DateTime time2 = new DateTime(); //定義Timer System.Timers.Timer Timers_Timer = new System.Timers.Timer(); 

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 杭州市| 田阳县| 历史| 公安县| 明星| 新巴尔虎左旗| 福安市| 娄底市| 治县。| 蒙山县| 江口县| 齐河县| 蓬安县| 灵川县| 洛川县| 东阳市| 仙桃市| 泽库县| 出国| 平安县| 印江| 格尔木市| 德钦县| 鲁甸县| 神农架林区| 金昌市| 綦江县| 临武县| 长泰县| 陵水| 思茅市| 安丘市| 临沧市| 涿州市| 株洲市| 无棣县| 高邮市| 苍南县| 临夏县| 镇雄县| 海伦市|