在项目中看到使用了Application.DoEvent();不明白这行代码的意思,开始研究学习。查msdn,有这样一个例子:

private void InitializePictureBox()
{
this.pictureBox1 = new System.Windows.Forms.PictureBox();
this.pictureBox1.BorderStyle =
System.Windows.Forms.BorderStyle.FixedSingle;
this.pictureBox1.SizeMode = PictureBoxSizeMode.StretchImage;
this.pictureBox1.Location = new System.Drawing.Point(72, 112);
this.pictureBox1.Name = "pictureBox1";
this.pictureBox1.Size = new System.Drawing.Size(160, 136);
this.pictureBox1.TabIndex = 6;
this.pictureBox1.TabStop = false;
}

private void InitializeOpenFileDialog()
{
this.openFileDialog1 = new System.Windows.Forms.OpenFileDialog();

// Set the file dialog to filter for graphics files.
this.openFileDialog1.Filter =
"Images (*.BMP;*.JPG;*.GIF)|*.BMP;*.JPG;*.GIF|" +
"All files (*.*)|*.*";

// Allow the user to select multiple images.
this.openFileDialog1.Multiselect = true;
this.openFileDialog1.Title = "My Image Browser";

}

private void fileButton_Click(System.Object sender, System.EventArgs e)
{
openFileDialog1.ShowDialog();
}

// This method handles the FileOK event.  It opens each file
// selected and loads the image from a stream into pictureBox1.
private void openFileDialog1_FileOk(object sender,
System.ComponentModel.CancelEventArgs e)
{

this.Activate();
string[] files = openFileDialog1.FileNames;

// Open each file and display the image in pictureBox1.
// Call Application.DoEvents to force a repaint after each
// file is read.       
foreach (string file in files )
{
System.IO.FileInfo fileInfo = new System.IO.FileInfo(file);
System.IO.FileStream fileStream = fileInfo.OpenRead();
pictureBox1.Image = System.Drawing.Image.FromStream(fileStream);
Application.DoEvents();
fileStream.Close();

// Call Sleep so the picture is briefly displayed,
//which will create a slide-show effect.
System.Threading.Thread.Sleep(2000);
}
pictureBox1.Image = null;
}

在private void openFileDialog1_FileOk方法中使用了此方法,况且在紧跟其后有个延时,延时了2秒,不明白此句的用意。多次运行程序发现使用了Application.DoEvent()后图片能够实时显示,文件框在隔2秒后关闭,屏蔽Application.DoEvent()后发现图片不能实时显示,在隔两秒文件框关闭时显示图片。此时明白了Application.DoEvent()的用意,是使界面能够实时刷新,感觉有点多线程的意思。

继续查资料查看对此语句的详细介绍,下面是从别人博客中摘抄的:

简介:
其实doEnvents很简单,就是暂停一下当前模块Code,好让你程序可以响应其它事件、消息……  
响应完其它事之后又回去继续执行刚才的Code  (允许窗体在忙时响应 UI 输入)

生动描述:
程序对CPU说,哥们,你去干别的事情吧

好处或意义:
全部显示,处理当前在消息队列中的所有Windows消息.
在大量循环中使用可以有效避免假死机现象

注意:
调用该方法可以在某消息引发事件时导致重新输入代码.

额外了解:
Window窗体运行机制:
当运行Windows窗体时,它将创建新窗体,然后该窗体等待处理事件
该窗体在每次处理事件时,均将处理与该事件关联的所有代码。
所有其他事件在队列中等待。
在代码处理事件时,应用程序并不响应。

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/xochenlin/archive/2008/10/31/3187129.aspx

当我们在事件里面进行大量的循环操作时,windows将等待循环结束。此时界面是得不到响应的。为了在WinForm界面上实时地显示每次循环得到的结果,可以用.net提供的Application.DoEvents();

Application.DoEvent使用相关推荐

  1. C#多线程与UI响应 防止界面假死不响应(子线程创建的窗体获取消息响应用Application.DoEvent )

    一. 概述 在使用C#进行应用程序设计时,经常会采用多线程的方式进行一些后台任务的工作.对于不同的应用场景,使用的策略也不尽相同. 1. 后台循环任务,少量UI更新:例如批量上传文件,并提供进度.这种 ...

  2. 动态顺序图可视化控件

    目录 介绍 为什么要使用它? 分布式系统的端到端跟踪 调试器 背景 使用代码 示例 如何使用控件 怎么运行的 Tick()方法 元素渲染 API引用 顺序 参加者 消息 激活 方框 SequenceD ...

  3. c#+wpf项目性能优化之OutOfMemoryException解密

    近期,使用c#+wpf开发的软件准备正式投入使用了,使用前进行了大量的测试,测试后发现了一些问题,其中最让人头疼的就是软件的性能问题(稳定性). 这里的稳定性具体表现在机器的cpu占有率和内存使用情况 ...

  4. IDL语言的几个要点回顾

    最近因为一个简单任务,重新使用了IDL这门在读研究生期间使用得比较多的语言,很久不用,对其中的一些语法规则和特性略显陌生,现将一些关键要点总结如下. IDL是一种数据分析和图像化应用程序及编程语言,先 ...

  5. Ubuntu 16.04 安装 Docker - Dependency failed for Docker Application Container

    Docker 安装 由于 apt 官方库里的 Docker 版本可能比较旧,所以先卸载可能存在的旧版本: sudo apt-get remove docker docker-engine docker ...

  6. SpringCloud配置文件 application.yml和 bootstrap.yml区别,执行顺序

    说在前面 SpringBoot默认支持properties和YAML两种格式的配置文件.前者格式简单,但是只支持键值对.如果需要表达列表,最好使用YAML格式.SpringBoot支持自动加载约定名称 ...

  7. Installation failed with message Invalid File:(Application Installatino Failed)

    导入一个demo 运行发现上图问题, Application Installation Failed 最后自己清理下工程就好了 参考方法: Click Build tab ---> Clean ...

  8. Manifest merger failed : Attribute application@allowBackup value=(false) 解决方法

    导入开源库出现上述错误 处理方法 在manifest中添加 xmlns:tools="http://schemas.android.com/tools" 然后在 applicati ...

  9. Android采用Application总结一下

    什么是 Application Application和Activity,Service由于是android框架的一个系统组件,当android程序启动时系统会创建一个 application对象.用 ...

最新文章

  1. CTF-window和linux下命令执行的知识
  2. 使用jQuery图表插件Sparklines来开发一个实用的网站PV(page view)实时监控应用
  3. 北京尚学堂|程序员的智慧
  4. 互联网晚报 | 2月11日 星期五 | 小红书月活跃用户超2亿;小鹏汽车宣布拓展欧洲市场;贝壳首个青年公寓项目落地上海...
  5. Nginx配置优化参考
  6. [转贴]基于HTTP的QQ协议
  7. java 不生成文件下载_java 下载文件时怎么避免在服务器上生成文件
  8. SQL Server 2019中SQL表变量延迟编译
  9. Ubuntu 14.04/16.04 (使用apt-get进行安装) 安装Docker
  10. sum-ftp-w.sh
  11. 一些osu的皮肤下载
  12. 【博弈论】翻硬币游戏8种模型
  13. 诺基亚S40系统手机使用技巧大全(此乃刘某整理)
  14. 内网安全 域环境的搭建(模仿真实内网环境 做渗透测试.)
  15. Android uni app原生插件页面全屏Activity的键盘档住输入框或弹起键盘跳动问题
  16. 在梦想的道路上,一路前行
  17. 【ReID】Harmonious Attention Network for Person Re-Identification
  18. Java DAO是啥?
  19. NDM(Neat Download Manager)删除所有下载记录
  20. 【Multisim仿真】检波电路仿真

热门文章

  1. java项目生成多个条码_java – 生成随机条形码 – 一个设计问题
  2. 在Centos系统下创建与Windows的共享文件夹
  3. 山石防火墙命令查看配置_hillstone 防火墙基本配置
  4. 卸载SQL server后,本地文件无法删除
  5. kafka安装及使用
  6. STM8S103调试PWM的踩坑过程
  7. Mac 破解IDEA 持续更新
  8. 如何将应用隐藏成一个计算机,局域网中如何隐藏自己的计算机
  9. Linux:僵尸进程 Zombie;waitpid
  10. Windows 11系统设置文件夹默认显示方式为“大图标”的方法