C# 延時函數 非Sleep


1.示例:

using System.Runtime.InteropServices;
[DllImport("kernel32.dll")]

static extern uint GetTickCount();
static void Delay(uint ms) {
    uint start = GetTickCount();
    while (GetTickCount() - start < ms) {
        System.Windows.Forms.Application.DoEvents();
    }
}

2.使用說明:

在很多時候,我們的程序,在執行下一步操作之前,需要等待上一步的執行完成,這種延時等待的方式在異步操作,或者是利用消息循環機制通信的程序中,最為體現的明顯。

3.應用場景:

舉個API的例子:

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

A向B發送一個消息,B去執行,此時A需要等待B執行完后,根據B的執行結果,再次向B發送下一個消息

 

上面的例子,是個很典型的延時應用。

說到延時,大家可能第一反應,就是 Sleep 。

先不談 Sleep 延時的精度如何,Sleep 的一個致命的弱點,就是 Sleep 的過程中,進程是不能響應外部操作的,變成了假死狀態,這樣的話,一個是用戶體驗很差,再者,用戶想中途終止也不行,只能干等,或者強制 KILL 掉程序。

 

所以,此時的Sleep是不可取的。 我們需要的,是一個可以繼續響應操作,而且精度高的延時函數。

就可以使用上面的示例了。

 

參:suzilong11的專欄 C# 延時函數 非Sleep


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM