关闭

KING_C#学习之Thread和Timer实现延时用法(附自动切换窗体实例)

标签: c#.net
1154人阅读 评论(1) 收藏 举报
分类:

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

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    最新评论