我做了个多文档窗体,子窗体中有一段代码要执行几十分钟的时间,当我想结束正在运行的子窗体时,自然用按了关闭按键,也同时看到unload事件被触发,其中的代码也被执行,但是窗体的Terminal事件从未发生(我在其中设了断点)。表面看来,窗体已经关闭,跟踪程序发现,在程序执行到Doevents时,窗体响应了关闭事件,从而引发了unload事件,其中将当前窗体的对象变量设为nothing,并释放其他的对像变量,但在unload事件结束后又返回到Doevents后面的语句。这是怎么回事?我怎样才能引发Terminal事件?看来将窗体的对像变量设为nothing只是清除了这个对像变量对程序代码内存区的索引,实际的代码仍在内存中运行,如何终止?
for i=50000
for j=5000
doevents
next j
next i就这么简单,在窗体的unload事件中加入set test=nothing,当我关闭窗体的时候,表面看来,窗体关闭了,新打开一个同样的窗体执行同样的操作也很正常。但是可以监视一下CPU的运行情况,当我关闭这个窗体时,其中的循环代码仍在运行,CPU竟然在100%的运行!所以,这里没有引用其它的对象变量,关闭窗体后代码仍在运行的情况同样是存在的,这是一个很普通的问题。解决办法:在test窗体上定义一个变量,如formisover as boolean ,在doevents后面判断一下此变量的状态,为true则exit sub,在test窗体的unload事件种,设定formisover=true。
也就是说,关闭窗体后一定要将运行中的过程结束,这样,terminate事件终于被触发,窗体真的没了,CPU被释放。
dim unloadtag as boolean在unload之前
unloadtag = True在循环中这个值,为真时退出循环,为假时不退出。
for i=50000
for j=5000
if unloadtag then exit sub
next j
next i
frmChild.Show
set frmChild=Nothing
另外,请不要随便执行End,因为使用End,那么你的窗体中的Unload都不会被执行,整个程序就会结束。