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屬性返回的值是有符號的,所以有一半的值用負數表示!

 


免責聲明!

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



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