为什么要使用DoEvents函数把控制权交给系统?

wuzhong 2003-12-10 01:28:26
使用DoEvents函数与不使用有什么区别,什么情况下要使用它?
...全文
14 点赞 收藏 6
写回复
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
wuzhong 2003-12-12
谢谢各位!!!!!!!!!!!!!!!
回复
射天狼 2003-12-10
因为VB对多线程的支持不是很好,使用时会出现问题,这样微软推出一此函数,以转让系统控制权,防止费时的操作时,系统如同死掉一样!.
回复
maculasoft 2003-12-10
将控制权交给操作系统,以便用户进行其它操作
回复
Maconel 2003-12-10
比如你在程序中做这样一个循环
for i=0 to 100000000
for j=0 to 10000000000
a=1
next j
next i
运行后程序会好象死了一样,如果窗体上还有其他按纽,会点了没反应。
但如果你在a=1下边加上一句doevents,
那么程序就不会死了,其他按纽都可以点。
回复
SoHo_Andy 2003-12-10
转让控制权,以便让操作系统处理其它的事件。

语法

DoEvents( )

说明

DoEvents 函数会返回一个 Integer,以代表 Visual Basic 独立版本中打开的窗体数目,例如,Visual Basic,专业版,在其它的应用程序中,DoEvents 返回 0。

DoEvents 会将控制权传给操作系统。当操作系统处理完队列中的事件,并且在 SendKeys 队列中的所有键也都已送出之后,返回控制权。

DoEvents 对于简化诸如允许用户取消一个已启动的过程 — 例如搜寻一个文件 — 特别有用。对于长时间过程,放弃控制权最好使用定时器或通过委派任务给 ActiveX EXE 部件来完成。以后,任务还是完全独立于应用程序,多任务及时间片由操作系统来处理。

小心 确保以 DoEvents 放弃控制权的过程,在第一次 DoEvents 返回之前,不能再次被其他部分的代码调用;否则会产生不可预料的结果。此外,如果其它的应用程序可能会和本过程以不可预知的方式进行交互操作,那么也不要使用 DoEvents,因为此时不能放弃控制权。


使用之后程序会有暂时的停顿
举个例子,当你进行大量数据处理时需要在界面上使用label提示进度,但实际上
因为系统占用率很高,所以界面不可能得到刷新显示,这时候就要在给label赋值之后
使用doevents函数返回系统控制权,这是系统就会处理界面的刷新显示等问题,你的
提示用户就能看到了

回复
davidlv 2003-12-10
使用后,就可以继续操作其他事了,不会感觉有停顿
回复
发动态
发帖子
VB基础类
创建于2007-09-28

7451

社区成员

VB 基础类
申请成为版主
社区公告
暂无公告