Application.DoEvent和定时刷新控件
我们写一个textbox,让其依循环递增,但每次都会出现假死现象,等循环结束后,变为最终值。今天总结一下:
private void button3_Click(object sender, EventArgs e)
{
for (int i = 0; i < 10000; i++)
{
textBox1.Text = i.ToString();
}
}
Windows 窗体应用程序运行时,它将创建一个新的窗体,然后该窗体等待需要处理的事件。该窗体在每次处理某个事件(如按钮单击)时,都会处理与该事件关联的所有代码。所有其他事件在队列中等待。在代码处理事件时,应用程序并不响应。例如,当将另一窗口拖到该窗口前面时,该窗口不重新绘制。针对这种情况有一下2终解决办法、
1.Application.DoEvent();
for (int i = 0; i < 10000; i++)
{
textBox1.Text = i.ToString();
Application.DoEvent();
}
2.this.Refresh();
Application.DoEvents()处理当前在消息队列中的所有Windows 消息。
Refresh(); 强制控件使其工作区无效并立即重绘自己和任何子控件
其实DoEvents跟多线程有些类似,却是完全不同的。使用DoEvents可以让事件(循环)在没有完成的时候就可以处理其他事件(当然多线程也可以实现)而这一切却不是同步的,当前事件(循环)不会等待完成自己而再去处理下一个事件,而是在DoEvents时就暂停(注意只是暂停,没有消失,而直接执行下一个得到的指令(事件)。而且当这个下一个指令完成后,先前在DoEvents处暂停的代码会再次继续执行。
所以使用DoEvents就要特别注意了,千万不要以为他只是简简单单强制执行到此处的代码。如果不知道它的工作方式,使用它可能给程序带来意想不到的麻烦。
最新文章
- 人机大战之AlphaGo的硬件配置和算法研究
- Atitti css3 新特性attilax总结
- 强联通 HDU 2767 3836
- 史上最用心的 iOS App 上架流程
- linux 常用命令;
- shell流程控制语句
- Linux dirname $0 source if
- 使用CocoaPods遇到的几个坑,记录一下
- 【技术贴】解决Program Files文件夹消失
- mac管理员密码破解
- 使用scrapy写好爬虫进行工作的时候,遇到错误及解决方法
- Sencha Architect 2 的使用
- HDU 4456(二维树状数组+坐标转换)
- C#设计模式之十七观察者模式(Observer Pattern)【行为型】
- 简单介绍nandflash、norflash、ram、sram、dram、rom、eeprom、flash的差别
- [JLOI2015]装备购买
- ListView控件使用
- CodeForces #549 Div.2 D. The Beatles
- 华为Java机试题
- Integer Partition(hdu4658)2013 Multi-University Training Contest 6 整数拆分二