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属性返回的值是有符号的,所以有一半的值用负数表示!
- 随机文章
- 热门文章
- 热评文章
- PHP文件操作之,插入某行,删除某行,获取行号
- 在树莓派/linux上使用阿里云DNS解析作为DDNS使用
- C#图像处理(各种旋转、改变大小、柔化、锐化、雾化、底片、浮雕、黑白、滤镜效果)
- C#图片处理示例(裁剪,缩放,清晰度,水印)
- 安装包制作工具 SetupFactory使用2 API清单
- C#中的MessageBox消息对话框
- STM32 中断向量表的位置 、重定向
- ESP8266在Eclipse下设置编译模式(有boot和无boot)