c#学习笔记之Application.DoEvents应用
Visual Studio里的摘要:处理当前在消息队列中的所有 Windows 消息。
交出CPU控制权,让系统可以处理队列中的所有Windows消息
比如在大运算量循环内,加Application.DoEvents可以防止界面停止响应
因为winform的消息循环是一个线程来处理,那么假如你的某个操作比较耗时,那么消息处理得等你这个耗时操作做完了才能继续,而Application.DoEvents方法就是允许你在耗时操作的内部调用它,而去处理消息队列中的消息。
像鼠标移动鼠标点击都是windows消息,如果耗时操作一直进行,那么界面就像死锁一样。
记得第一次使用Application.DoEvents()是为了在加载大量数据时能够有一个数据加载的提示,不至于系统出现假死的现象,当时也没有深入的去研究他的原理是怎样的,结果在很多地方都用上了Application.DoEvents(),今天看到了关于这方面的一些文章,知道我以前有些用法是不当的,有些地方需要慎用
Application.DoEvents()。
首先我们先看看在循环比较大的程序中,它的作用还是不错的,起到了一个实时响应的效果,例如:
for (int q = 0; q < 1000000; q++)
{
textBox1.Text = q.ToString();
Application.DoEvents();//实时响应文本框中的值
}
如果没有加上 DoEvents的话,由于循环时间会比较久就会出现假死的状态,而且程序不能处理其他的事件。而如果加上DoEvents的话就会对文本框的值实时响应,给用户带来较好的用户体验,可是DoEvents也带来了效率上的问题,处理同样的一个事件调用了DoEvents后效率降低了好几倍,这也是为什么要慎用的原因了。下面是我做的一个测试:
private void button1_Click(object sender, EventArgs e)
{
expendTime.start();
for (int q = 0; q < 100000; q++)
{
textBox1.Text = q.ToString();
Application.DoEvents();
}
label2.Text = expendTime.ComputerTime();//计算耗时
}
private void button2_Click(object sender, EventArgs e)
{
expendTime.start();
for (int q = 0; q < 100000; q++)
{
textBox2.Text = q.ToString();
}
label3.Text = expendTime.ComputerTime();//计算耗时
}
执行耗时对比:
从较大数据的循环中可以看出效率是很低的,所以如果能不调用DoEvents就尽量不用。也可以通过别的方法来处理的,例如多线程异步调
c#学习笔记之Application.DoEvents应用相关推荐
- 21、深入浅出MFC学习笔记,Application Framework简介
1.Application Framework是一个完整的程序模型:是一组合作无间的对象,彼此藉消息的流动而沟通,并且互相调用对方的函数以求完成任务.<?xml:namespace prefix ...
- 【学习笔记】低代码平台(LCAP:Low-Code Application Platform)
学习笔记:低代码平台(LCAP:Low-Code Application Platform) [概念] 开发者写很少的代码,通过低代码平台提供的界面.逻辑.对象.流程等可视化编排工具来完成大量的开发工 ...
- Sharepoin学习笔记—架构系列—Sharepoint服务(Services)与服务应用程序框架(Service Application Framework) 1
Sharepoin学习笔记-架构系列-Sharepoint服务(Services)与服务应用程序框架(Service Application Framework) 1 Sharepoint服务是Sha ...
- Composite UI Application Block学习笔记之Event Broker
Composite UI Application Block着重于将应用逻辑和界面分开,让应用系统具备更清晰的结构,更强的扩展性.可移植性.在曹严明先生的讲座中,提及到了关于应用CAB开发的几个指导性 ...
- EntLib 3.1学习笔记(2) : Data Access Application Block
EntLib 3.1学习笔记(2) : Data Access Application Block 简化实现通用数据访问功能的开发任务.应用程序可以在很多情况下使用应用程序块,例如读取显示数据.获得通 ...
- Subvector Commitments with Application to Succinct Arguments学习笔记
1. 背景知识 Russell W. F. Lai 和 Giulio Malavolta 在Crypto 2019上发表的论文<Subvector Commitments with Applic ...
- Compressed sigma-Protocol Theory and Practical Application to Plug Play Secure Algorithmics学习笔记
1. 引言 Thomas Attema等人2020年论文<Compressed sigma-Protocol Theory and Practical Application to Plug & ...
- C#学习笔记——委托机制
什么是委托?委托仅仅是函数指针,那就是说,它能够引用函数,通过传递地址的机制完成.委托是一个类,当你对它实例化时,要提供一个引用函数,将其作为它构造函数的参数.委托具有以下特点:1)委托类似于 C++ ...
- 个人学习笔记(备份)
目录 知识链接 1.深度学习 2.机器视觉 3.图像处理 4.编程基础 编程笔记 1.Halcon 2.Matlab 3.DOS指令 4.C# 5.MySQL 6.Python 7.OpenCV+C+ ...
- WPS表格 JSA 学习笔记 - 实现【设置编号】并添加到自定义选项卡
WPS表格 JSA 学习笔记 - 设置编号 0. 纯手工实现: 0.1. 编号使用建议 1. 标题设置编号 2. 遍历所有标题设置编号 添加到自定义选项卡 参考资料 关于编号引用 经常遇到编号设置混乱 ...
最新文章
- OpenCV Sobel检测算子和Scharr检测算子
- 微服务为什么一定要用docker
- sudo su 与 su
- P6860-象棋与马【欧拉函数,杜教筛】
- python3-numpy IO load()、save()、savez()、loadtxt()、savetxt()、tofile()、fromfile()
- C语言的关键字和详细介绍
- linux服务器系统_利用Zabbix监控系统监测Linux服务器系统时间是否准确完美实现...
- Python语言中 del函数和insert函数用法
- 空间复杂度,实现从excel导出到txt文件中的java代码自动构建,逻辑条件不同实现则不同...
- Chome 浏览器,您的连接不是私密连接
- MySQL数据库无法启动的简单排错
- Django 清空数据库的所有表
- FBX格式和obj格式的区别
- 京瓷1125打印机清零_京瓷1125驱动下载
- 融创孙喆一:父辈的光环与阴影下,我反对扮演所谓的二代
- 401832-00-4,Thalidomide-O-PEG4-Amine在EDC或HATU存在下与NHS酯基或羧酸反应的合成化合物
- 【仿微信朋友圈时间,几天前,几分钟前,显示几周前】
- EXCEL转PDF,JACOB,生成checkbox
- Tomcat之——宕机自动重启和每日定时启动tomcat
- 月工资5k,除去生活每个月怎样存钱?