关闭

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

标签: c#.net
2196人阅读 评论(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
查看评论

C# 多线程之新线程延时执行

using System; using System.Threading; namespace ConsoleApplication1 { class Program { public static ManualResetEvent mre = new...
  • luols
  • luols
  • 2011-11-25 11:25
  • 7741

[C#].NET中的三种Timer的区别和用法

//1.实现按用户定义的时间间隔引发事件的计时器。此计时器最宜用于 Windows 窗体应用程序中,并且必须在窗口中使用。  System.Windows.Forms.Timer // 2.提供以指定的时间间隔执行方法的机制。无法继承此类。  System.Threadin...
  • aoxuefeihu
  • aoxuefeihu
  • 2012-04-20 23:26
  • 41348

C# 在多线程中调用Timer

经过查找资料,发现timer控件的timer.start();方法不能从非Ui的线程启动。
  • hsk_scnu
  • hsk_scnu
  • 2017-04-12 00:02
  • 2231

C# 线程Timer的Change方法解释

Timer.Change(Timeout.Infinite,Timeout.Infinite)
  • tieshuxianrezhang
  • tieshuxianrezhang
  • 2015-11-30 10:39
  • 2482

c#多线程几种timer操作详解

  • 2013-12-06 16:57
  • 750KB
  • 下载

延时函数和Timer的使用

延时函数和Timer的使用 //延时函数: [NSThread sleepForTimeInterval:5.0]; //暂停5s. //Timer的使用: NSTimer *connectionTimer; //timer对象 //实例化timer self.connectionT...
  • u014599371
  • u014599371
  • 2014-12-30 11:27
  • 834

Thread和Timer实现延时用法(自动切换窗体demo)

  • 2016-09-01 01:20
  • 87KB
  • 下载

wpf 增加延时处理

System.Threading.Timer timerGetAlarms= new System.Threading.Timer(new System.Threading.TimerCallback(getAlarms), null, 1000, 10000);    p...
  • fxhflower
  • fxhflower
  • 2011-12-29 13:48
  • 3210

C#多线程与Unity中的使用

C#的多线程是一个非常有用的功能,测试如下: (自动加i) using UnityEngine; using System.Collections; using System.Threading; public class Test : MonoBehaviour { Thread m...
  • Cvail
  • Cvail
  • 2015-06-26 17:42
  • 827

c# 异步延时执行代码

Task.Delay 异步延时using System; using System.Threading.Tasks;namespace ConsoleApp1 { class Program { static void Main(string[] args) ...
  • xiawu1990
  • xiawu1990
  • 2017-10-26 10:19
  • 704
    最新评论