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函数相关推荐
- 使用tcgetattr函数与tcsetattr函数控制终端
2019独角兽企业重金招聘Python工程师标准>>> 使用tcgetattr函数与tcsetattr函数控制终端 为了便于通过程序来获得和修改终端参数,Linux还提供了tcget ...
- python所有函数用法_Python函数使用方法(高级用法)
前面章节,已经介绍了 Python 函数的所有基本用法和使用注意事项.但是,Python 函数的用法还远不止此,Python 函数还支持赋值.作为其他函数的参数以及作为其他函数的返回值. 首先,Pyt ...
- linux下的系统调用函数到内核函数的追踪
Original from: http://blog.chinaunix.net/uid-28458801-id-3468966.html 使用的 glibc : glibc-2.17 使用的 lin ...
- python asyncio回调函数_python回调函数用法实例分析
python回调函数用法实例分析 本文实例讲述了python回调函数用法.分享给大家供大家参考.具体分析如下: 软件模块之间总是存在着一定的接口,从调用方式上,可以把他们分为三类:同步调用.回调和异步 ...
- linux callback函数,C++回调函数(callback)的使用
什么是回调函数(callback) 模块A有一个函数foo,它向模块B传递foo的地址,然后在B里面发生某种事件(event)时,通过从A里面传递过来的foo的地址调用foo,通知A发生了什么事情,让 ...
- 如果你也会C#,那不妨了解下F#(4):了解函数及常用函数
函数式编程其实就是按照数学上的函数运算思想来实现计算机上的运算.虽然我们不需要深入了解数学函数的知识,但应该清楚函数式编程的基础是来自于数学. 例如数学函数f(x) = x^2+x,并没有指定返回值的 ...
- ege限制鼠标移动的函数_浅谈函数节流和函数防抖
什么是函数节流和函数防抖?下面本篇文章就来给大家浅谈一下函数节流和函数防抖.有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助. 前言 事件的触发权很多时候都属于用户,有些情况下会产生问题 ...
- 使用tcgetattr函数与tcsetattr函数控制终端-转
为了便于通过程序来获得和修改终端参数,Linux还提供了tcgetattr函数和tcsetattr函数.tcgetattr用于获取终端的相关参数,而tcsetattr函数用于设置终端参数.这两个函数的 ...
- 【C、C++】ctype.h、cctype中的isnumber()函数和isdigit()函数的区别
Mac OS X 手册页上ctype函数中对isnumber()和isdigit()函数的区别是这样解释的: The isnumber() function behaves similarly to ...
- CPP2022-16-宏、函数重载与函数模板
6-1 通用对数函数(宏) 分数 5 全屏浏览题目 切换布局 作者 李祥 单位 湖北经济学院 C语言库函数只提供以 e 和 10 为底数的对数函数.我们自行设计一个以任意正实数 a 为底数.任意正实数 ...
最新文章
- 封装成vla函数_不知道怎么封装代码?看看这几种设计模式吧!
- 《2021人脸识别行业白皮书》发布 拥挤安防还有多少空间?
- Cadence入门笔记(2):分裂元件的制作方法
- C++中static关键字作用
- 动手学无人驾驶(2):车辆检测
- 微软以白金会员加入 OpenChain 开源组织
- 【原创】Oracle RAC原理和安装
- oracle锁mode,【案例】Oracle dml操作产生TM锁 lmode=6 分析原因和解决办法
- R语言读取淘宝的单品页的名称和价格
- Mvc 前台 匿名对象
- 计算机专业范文推荐信,出国留学推荐信范文,计算机专业
- mingw 使用 HPSocket 进阶版
- 结巴 python_结巴中文分词使用学习(python)
- 宋星:误读数据等于自杀
- Nexus 搭建docker本地仓库(hosted)和私有仓库(proxy)
- EIGRP原理及配置
- java语言基础 : 初识计算机和Java语言-----java初识之路
- 11 系统建模语言SysML实例——蒸馏器
- ARM V7_VFP,ARM V7_VFPV3 与ARM V7_NEON 介绍
- java套接字创建失败_Linux的文件描述符个数限制导致创建文件(或socket)失败的问题...
热门文章
- python随笔:round函数的使用
- oracle外币账套 初始化,Oracle EBS查找帐套本位币及币种间汇率转换的方法
- c语言分离个位十位百位_用c语言如何表示出一个数的个位,百位,十位
- Mac使用系列之软件安装权限
- Axure RP9制作汉堡菜单
- 【Luogu P1151】子数整数
- 【概率论】指数分布 Exponential Distribution
- 工作手册 会计核算制度 目录 1. 会计核算管理制度	1 2. 会计档案管理办法	4 1.会计核算管理制度 8. 1.采取借贷记账法记账,采用权责发生制,即凡是收益已经实现,用已经发生,不论款
- SQL注入 基础概述及相关知识
- 数据仓库中历史拉链表的更新方法