Application.DoEvent使用
在项目中看到使用了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使用相关推荐
- C#多线程与UI响应 防止界面假死不响应(子线程创建的窗体获取消息响应用Application.DoEvent )
一. 概述 在使用C#进行应用程序设计时,经常会采用多线程的方式进行一些后台任务的工作.对于不同的应用场景,使用的策略也不尽相同. 1. 后台循环任务,少量UI更新:例如批量上传文件,并提供进度.这种 ...
- 动态顺序图可视化控件
目录 介绍 为什么要使用它? 分布式系统的端到端跟踪 调试器 背景 使用代码 示例 如何使用控件 怎么运行的 Tick()方法 元素渲染 API引用 顺序 参加者 消息 激活 方框 SequenceD ...
- c#+wpf项目性能优化之OutOfMemoryException解密
近期,使用c#+wpf开发的软件准备正式投入使用了,使用前进行了大量的测试,测试后发现了一些问题,其中最让人头疼的就是软件的性能问题(稳定性). 这里的稳定性具体表现在机器的cpu占有率和内存使用情况 ...
- IDL语言的几个要点回顾
最近因为一个简单任务,重新使用了IDL这门在读研究生期间使用得比较多的语言,很久不用,对其中的一些语法规则和特性略显陌生,现将一些关键要点总结如下. IDL是一种数据分析和图像化应用程序及编程语言,先 ...
- Ubuntu 16.04 安装 Docker - Dependency failed for Docker Application Container
Docker 安装 由于 apt 官方库里的 Docker 版本可能比较旧,所以先卸载可能存在的旧版本: sudo apt-get remove docker docker-engine docker ...
- SpringCloud配置文件 application.yml和 bootstrap.yml区别,执行顺序
说在前面 SpringBoot默认支持properties和YAML两种格式的配置文件.前者格式简单,但是只支持键值对.如果需要表达列表,最好使用YAML格式.SpringBoot支持自动加载约定名称 ...
- Installation failed with message Invalid File:(Application Installatino Failed)
导入一个demo 运行发现上图问题, Application Installation Failed 最后自己清理下工程就好了 参考方法: Click Build tab ---> Clean ...
- Manifest merger failed : Attribute application@allowBackup value=(false) 解决方法
导入开源库出现上述错误 处理方法 在manifest中添加 xmlns:tools="http://schemas.android.com/tools" 然后在 applicati ...
- Android采用Application总结一下
什么是 Application Application和Activity,Service由于是android框架的一个系统组件,当android程序启动时系统会创建一个 application对象.用 ...
最新文章
- CTF-window和linux下命令执行的知识
- 使用jQuery图表插件Sparklines来开发一个实用的网站PV(page view)实时监控应用
- 北京尚学堂|程序员的智慧
- 互联网晚报 | 2月11日 星期五 | 小红书月活跃用户超2亿;小鹏汽车宣布拓展欧洲市场;贝壳首个青年公寓项目落地上海...
- Nginx配置优化参考
- [转贴]基于HTTP的QQ协议
- java 不生成文件下载_java 下载文件时怎么避免在服务器上生成文件
- SQL Server 2019中SQL表变量延迟编译
- Ubuntu 14.04/16.04 (使用apt-get进行安装) 安装Docker
- sum-ftp-w.sh
- 一些osu的皮肤下载
- 【博弈论】翻硬币游戏8种模型
- 诺基亚S40系统手机使用技巧大全(此乃刘某整理)
- 内网安全 域环境的搭建(模仿真实内网环境 做渗透测试.)
- Android uni app原生插件页面全屏Activity的键盘档住输入框或弹起键盘跳动问题
- 在梦想的道路上,一路前行
- 【ReID】Harmonious Attention Network for Person Re-Identification
- Java DAO是啥?
- NDM(Neat Download Manager)删除所有下载记录
- 【Multisim仿真】检波电路仿真