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应用相关推荐

  1. 21、深入浅出MFC学习笔记,Application Framework简介

    1.Application Framework是一个完整的程序模型:是一组合作无间的对象,彼此藉消息的流动而沟通,并且互相调用对方的函数以求完成任务.<?xml:namespace prefix ...

  2. 【学习笔记】低代码平台(LCAP:Low-Code Application Platform)

    学习笔记:低代码平台(LCAP:Low-Code Application Platform) [概念] 开发者写很少的代码,通过低代码平台提供的界面.逻辑.对象.流程等可视化编排工具来完成大量的开发工 ...

  3. Sharepoin学习笔记—架构系列—Sharepoint服务(Services)与服务应用程序框架(Service Application Framework) 1

    Sharepoin学习笔记-架构系列-Sharepoint服务(Services)与服务应用程序框架(Service Application Framework) 1 Sharepoint服务是Sha ...

  4. Composite UI Application Block学习笔记之Event Broker

    Composite UI Application Block着重于将应用逻辑和界面分开,让应用系统具备更清晰的结构,更强的扩展性.可移植性.在曹严明先生的讲座中,提及到了关于应用CAB开发的几个指导性 ...

  5. EntLib 3.1学习笔记(2) : Data Access Application Block

    EntLib 3.1学习笔记(2) : Data Access Application Block 简化实现通用数据访问功能的开发任务.应用程序可以在很多情况下使用应用程序块,例如读取显示数据.获得通 ...

  6. Subvector Commitments with Application to Succinct Arguments学习笔记

    1. 背景知识 Russell W. F. Lai 和 Giulio Malavolta 在Crypto 2019上发表的论文<Subvector Commitments with Applic ...

  7. 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 & ...

  8. C#学习笔记——委托机制

    什么是委托?委托仅仅是函数指针,那就是说,它能够引用函数,通过传递地址的机制完成.委托是一个类,当你对它实例化时,要提供一个引用函数,将其作为它构造函数的参数.委托具有以下特点:1)委托类似于 C++ ...

  9. 个人学习笔记(备份)

    目录 知识链接 1.深度学习 2.机器视觉 3.图像处理 4.编程基础 编程笔记 1.Halcon 2.Matlab 3.DOS指令 4.C# 5.MySQL 6.Python 7.OpenCV+C+ ...

  10. WPS表格 JSA 学习笔记 - 实现【设置编号】并添加到自定义选项卡

    WPS表格 JSA 学习笔记 - 设置编号 0. 纯手工实现: 0.1. 编号使用建议 1. 标题设置编号 2. 遍历所有标题设置编号 添加到自定义选项卡 参考资料 关于编号引用 经常遇到编号设置混乱 ...

最新文章

  1. OpenCV Sobel检测算子和Scharr检测算子
  2. 微服务为什么一定要用docker
  3. sudo su 与 su
  4. P6860-象棋与马【欧拉函数,杜教筛】
  5. python3-numpy IO load()、save()、savez()、loadtxt()、savetxt()、tofile()、fromfile()
  6. C语言的关键字和详细介绍
  7. linux服务器系统_利用Zabbix监控系统监测Linux服务器系统时间是否准确完美实现...
  8. Python语言中 del函数和insert函数用法
  9. 空间复杂度,实现从excel导出到txt文件中的java代码自动构建,逻辑条件不同实现则不同...
  10. Chome 浏览器,您的连接不是私密连接
  11. MySQL数据库无法启动的简单排错
  12. Django 清空数据库的所有表
  13. FBX格式和obj格式的区别
  14. 京瓷1125打印机清零_京瓷1125驱动下载
  15. 融创孙喆一:父辈的光环与阴影下,我反对扮演所谓的二代
  16. 401832-00-4,Thalidomide-O-PEG4-Amine在EDC或HATU存在下与NHS酯基或羧酸反应的合成化合物
  17. 【仿微信朋友圈时间,几天前,几分钟前,显示几周前】
  18. EXCEL转PDF,JACOB,生成checkbox
  19. Tomcat之——宕机自动重启和每日定时启动tomcat
  20. 月工资5k,除去生活每个月怎样存钱?

热门文章

  1. 中国大学MOOC 程序设计入门——C语言 翁凯 编程测试题汇总
  2. 【计算理论】计算理论总结 ( 非确定性有限自动机 NFA 转为确定性有限自动机 DFA ) ★★
  3. 干货!情感计算理论基础必看知识!!
  4. 火山伪原创视频软件 短视频md5修改过检测工具
  5. 免费的推广APP方案
  6. Excel对比两列数据相似度函数
  7. python 手写m3u8多线程下载器
  8. 花体字转换器微信小程序源码支持多种花样字体不同风格
  9. 三相电机控制方式入门,看完这一篇就够了
  10. 程序员10个必须有的Android应用程序