C#中的延时函数sleep

Qamar ·
更新时间:2024-11-10
· 1047 次阅读

目录

C#延时函数sleep

sleep

C#延时函数,不止sleep函数

关于Math.Abs()

其他

用C#中的线程来实现

C#延时函数sleep sleep using System.Threading;  //导入命名空间,类Thread就在此空间中 Thread.Sleep(2000); //延时2s C#延时函数,不止sleep函数

在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# sleep

需要 登录 后方可回复, 如果你还没有账号请 注册新账号