KING_C#學習之Thread和Timer實現延時用法(附自動切換窗體例項)
阿新 • • 發佈:2019-02-12
oh no, 很久沒在這裡更新部落格了,最近公司專案逼得比較緊,今晚加班到2330,程式猿真的不容易啊。
廢話不多說了,直入今天主題,thread和timer的用法及區別。
應用背景是這樣的:
在主介面(WPF)點選一個按鈕,彈出一個窗體form1,即顯示資訊確認介面, 然後在該介面有個確認按鈕btn,點選btn後,顯示正在讀取介面,當讀取完畢後,顯示讀取完畢介面,等待幾秒鐘自動把窗體form1關閉。
完成這個任務的做法有很多種,有的童鞋可能會連續彈出三個窗體(為了切換三個不同的頁面),但這個方法不太建議,會有一些意向不到的現象出現,這個留給大家自己體會。
而我採取的方案是,
一個窗體,三個使用者控制元件(資訊確認介面,正在讀取資訊介面,讀取完畢介面),在該窗體上例項化這三個使用者控制元件,利用其可見性visibility屬性,切換他們之間的顯示。
這裡的難點是如何保證介面切換順暢,不能太快,也不能太卡,這就用到延時/定時的知識了。下面我主要貼一下有關延時的主要程式碼:
有興趣的童鞋可以到這裡下載整體專案看看:點選開啟連結// 方法一:新開執行緒休眠 var t1 = new Thread(new ThreadStart(Change2Test3)); t1.Start(); // 方法二:在主執行緒使用Thread.Sleep(延時),切記要加上Application.DoEvents(); // 不然會出現卡頓情況 //System.Windows.Forms.Application.DoEvents(); //Thread.Sleep(4000); //SetTest3(); // 方法三:Timer是定時 //tmrDelayTime.Interval = 4000; //tmrDelayTime.Enabled = true; //tmrDelayTime.Elapsed += (sender, args) => //{ // var dispatcher = this.Dispatcher; // if (dispatcher != null) // dispatcher.Invoke((Action)delegate // { // tmrDelayTime.Enabled = false; // SetTest3(); // }); //};
懇請各位大神指導,探討學習,由於明天還要上班,不對,是加班,所以俺要先睡了,有疑問歡迎留言,共同學習,共同進步,。。。。。Thread.Sleep(999999999999999999)>_<