我们写一个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就要特别注意了,千万不要以为他只是简简单单强制执行到此处的代码。如果不知道它的工作方式,使用它可能给程序带来意想不到的麻烦。

最新文章

  1. 人机大战之AlphaGo的硬件配置和算法研究
  2. Atitti css3 新特性attilax总结
  3. 强联通 HDU 2767 3836
  4. 史上最用心的 iOS App 上架流程
  5. linux 常用命令;
  6. shell流程控制语句
  7. Linux dirname $0 source if
  8. 使用CocoaPods遇到的几个坑,记录一下
  9. 【技术贴】解决Program Files文件夹消失
  10. mac管理员密码破解
  11. 使用scrapy写好爬虫进行工作的时候,遇到错误及解决方法
  12. Sencha Architect 2 的使用
  13. HDU 4456(二维树状数组+坐标转换)
  14. C#设计模式之十七观察者模式(Observer Pattern)【行为型】
  15. 简单介绍nandflash、norflash、ram、sram、dram、rom、eeprom、flash的差别
  16. [JLOI2015]装备购买
  17. ListView控件使用
  18. CodeForces #549 Div.2 D. The Beatles
  19. 华为Java机试题
  20. Integer Partition(hdu4658)2013 Multi-University Training Contest 6 整数拆分二

热门文章

  1. datagridview绑定xml
  2. 给虚拟机添加eth1网络适配器(网卡)
  3. tnsping命令解析
  4. Linux重置管理员密码
  5. 【POJ2151】Check the difficulty of problems
  6. java-tip-HashMap
  7. CentOS搭建VSFTP服务器
  8. java的static块及相关内容
  9. layer使用注意事项
  10. 搭建自己的MQTT服务器