C#延时程序
来源:互联网 发布:任务分析矩阵 编辑:程序博客网 时间:2024/05/21 22:23
在C#窗口程序中,如果在主线程里调用Sleep,在Sleep完成之前, 界面呈现出假死状态,不能响应任何操作!
下边实现的是非独占性延时函数,延时过时中界面仍可响应消息:
public static void Delay(int milliSecond){ int start = Environment.TickCount; while (Math.Abs(Environment.TickCount - start) < milliSecond) { Application.DoEvents(); }}
关于Math.Abs():
Environment.TickCount,内部API是用DWORD GetTickCount()来实现的,该属性的值从系统计时器派生,并以 32 位有符号整数的形式存储。因此,如果系统连续运行,TickCount 将在约 24.9 天内从零递增至 Int32. MaxValue ,然后跳至 Int32. MinValue (这是一个负数),再在接下来的 24.9 天内递增至零。DWORD是无符号的,而 Environment.TickCount属性返回的值是有符号的,所以有一半的值用负数表示!
其他:
1.用sleep()使线程休眠。
直接在需要延时的地方插入 System.Threading.Thread.Sleep(1000); 即可。
这种方式最方便,但是延时过程中会停止其他响应,如果用在主线程中会造成程序的假死。如果有异步操作的话也会暂停,例如用webBrowser加载网页,本来希望延时一段时间等待网页加载完毕,但用sleep的话同时会暂停网页的加载过程。
用Thread和Timer控件都可以实现,如果用Timer_Tick(…)的话,因为不能在其他函数中调用Timer_Tick(…),所以用起来不方便,其实这两种都是用到了线程,微软推荐的方法是用委托。
用C#中的线程来实现:
using System.Threading;//引入命名空间
1.延时10ms代码为:
Thread.Sleep(10);
2.延时1s代码为:
Thread.Sleep(1000);
平时我们在做winform开发的时候,有时候需要让程序休眠几秒钟,但是,如果我们直接使用 thread.sleep()函数,页面ui就会停止响应。怎么样解决呢,你可以把页面涉及到表现ui的代码放到一个单线程处理,也可以采用我下面的做法,加一个小函数ok了。
/// <summary> /// 延时函数 /// </summary> /// <param name="delayTime">需要延时多少秒</param> /// <returns></returns> public static bool Delay(int delayTime) { DateTime now = DateTime.Now; int s; do { TimeSpan spand = DateTime.Now - now; s = spand.Seconds; Application.DoEvents(); } while (s < delayTime); return true; }
- C#延时程序
- c#延时程序
- C# 延时程序 delay
- C#中的延时小程序
- C# 延时
- C# 延时
- C#延时
- 延时程序
- 延时程序
- 延时程序
- C#另类延时
- c#非独占延时
- C# 延时函数
- 汇编 延时程序
- 怎样让程序延时
- 延时小程序
- 汇编延时程序
- 51精确延时程序
- [Hadoop]MapReduce中的Partitioner与Combiner
- 单例模式
- linux常用指令整理
- 大写C语言注释
- 集合框架_TreeSet存储自定义对象并遍历练习1
- C#延时程序
- 多机器人避障
- java 调用webservice的方法
- 文件上传与下载之文件下载
- C语言实现url的编码和解码
- python在命令行模式下查看帮助文档
- WebService CXF学习
- 集合框架_TreeSet存储自定义对象并遍历练习2)
- spring4学习日记——第二天