1. 程式人生 > >KING_C#學習之Thread和Timer實現延時用法(附自動切換窗體例項)

KING_C#學習之Thread和Timer實現延時用法(附自動切換窗體例項)

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)>_<