C# DoEvents

来源:互联网 发布:剑网三萝莉捏脸数据图 编辑:程序博客网 时间:2024/05/12 07:12

转自http://hi.baidu.com/lulianqi15/blog/item/9e1558ddd6569fbdcd1166ff.html

 

应用程序使用 My.Application.DoEvents 方法可以处理代码运行时可能引发的其他事件。My.Application.DoEvents 方法与 DoEvents 方法的行为相同。

Windows 窗体应用程序运行时,它将创建一个新的窗体,然后该窗体等待需要处理的事件。该窗体在每次处理某个事件(如按钮单击)时,都会处理与该事件关联的所有代码。所有其他事件在队列中等待。在代码处理事件时,应用程序并不响应。例如,当将另一窗口拖到该窗口前面时,该窗口不重新绘制。

如果在代码中调用 My.Application.DoEvents,则您的应用程序可以处理其他事件。例如,如果代码在一个循环中将数据添加到 ListBox,并且在循环的每一步后都调用My.Application.DoEvents,则另一个窗口被拖到窗体上面时,该窗体将重新绘制。如果从代码中移除 My.Application.DoEvents,那么在按钮的单击事件处理程序执行结束以前,您的窗体不会重新绘制。

通常,您在循环中使用该方法来处理消息。

 

     以上引至MSDN

 

     其实DoEvents跟多线程有些类似,却是完全不同的。使用DoEvents可以让事件(循环)在没有完成的时候就可以处理其他事件(当然多线程也可以实现)而这一切却不是同步的,当前事件(循环)不会等待完成自己而再去处理下一个事件,而是在DoEvents时就暂停(注意只是暂停,没有消失,而直接执行下一个得到的指令(事件)。而且当这个下一个指令完成后,先前在DoEvents处暂停的代码会再次继续执行。

     所以使用DoEvents就要特别注意了,千万不要以为他只是简简单单强制执行到此处的代码。如果不知道它的工作方式,使用它可能给程序带来意想不到的麻烦。

来自http://hi.baidu.com/lulianqi15/blog/item/9e1558ddd6569fbdcd1166ff.html
原创粉丝点击