您的位置:首页 > 编程语言 > C#

C#延时函数 非Sleep

2013-12-06 09:14 225 查看
在很多时候,我们的程序,在执行下一步操作之前,需要等待上一步的执行完成,这种延时等待的方式在异步操作,或者是利用消息循环机制通信的程序中,最为体现的明显。

举个API的例子:

我们自己的程序是A,需要利用API结合Windows 消息机制,控制外部程序B;

A向B发送一个消息,B去执行,此时A需要等待B执行完后,根据B的执行结果,再次向B发送下一个消息

上面的例子,是个很典型的延时应用。

说到延时,大家可能第一反应,就是 Sleep 。

先不谈 Sleep 延时的精度如何,Sleep 的一个致命的弱点,就是 Sleep 的过程中,进程是不能响应外部操作的,变成了假死状态,这样的话,一个是用户体验很差,再者,用户想中途终止也不行,只能干等,或者强制 KILL 掉程序。

所以,此时的Sleep是不可取的。我们需要的,是一个可以继续响应操作,而且精度高的延时函数。

下面,我们自己实现一个:

1.引用namespace

[csharp] view
plaincopy

using System.Runtime.InteropServices;  

2.引用API函数

[csharp] view
plaincopy

[DllImport("kernel32.dll")]  

private static extern uint GetTickCount();  

3.声明延时函数

[csharp] view
plaincopy

private void Delay(uint ms)  

        {  

            uint start = GetTickCount();  

            while (GetTickCount() - start < ms)  

            {  

                Application.DoEvents();  

                Console.WriteLine((GetTickCount() - start).ToString());  

            }  

        }  

4.调用Delay函数(其中ms为毫秒)

[csharp] view
plaincopy

private void button4_Click(object sender, EventArgs e)  

        {  

            Delay(5000);//等待5秒  

        }  
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: