最近自己做了个activex控件,手动添加进程序后(即向其他控件一样,在写程序的时候就添加进去),想在程序关闭时卸载但是不知如何处理,是在ACTIVEX控件里面进行相应的属性设置处理关闭,还是可以在form_unload里面进行相应的处理,望各位高手大大指教。目前我只能用end关闭,但是编译成exe文件以后,发现资源没有完全释放,而且就是那个控件还没有释放。因为该控件是进行图像处理的,有时候关闭程序时控件还在进行图像处理没有处理完,所以只能在使用该控件的程序里面用end结束,我试过在空间里面加end语句,但是不支持,在程序里面用unload +控件名也不支持。
你是不是用到了DoEvents?
对DoEvents的误用容易引起资源无法释放
用DIB快多了,可以实时完成,根本不需要DoEvents
我以前写的用VB作DIB图像处理的文章(其中的连接早已失效):
http://dev.csdn.net/develop/article/20/20442.shtmWallesCai(曾经沧海难为水,除却巫山不是云。此情可待成追忆,只是当时已惘然。)也写过几个例子:
http://blog.csdn.net/WallesCai/
Public Sub Delay(MSceond As Long)
Dim i As Long
If MSceond < 5 Then Exit Sub
i = GetTickCount
Do While GetTickCount - i < MSceond
DoEvents
Loop
End Sub
,其中的DoEvents,导致unload时资源未释放,谁有办法可以解决
在你的循环中判断为 True 时中断循环
在UserControl的Terminate事件中将m_IsExit设为True
在DoEvents循环中检查m_IsExit
在UserControl中定义一标志变量(如m_IsExit)
在UserControl的Terminate事件中将m_IsExit设为True
在DoEvents循环中检查m_IsExit
无法解决。
主要是我在Terminate中将m_show设为false,但是回到doevents循环中m_show又变成了true,真是奇怪,单步跟踪也没发现其他地方有赋值的。
现在想问一下在UserControl中有没有可以用的向end一样的东西,我试过了,end,unload什么的都不行。
Private m_show as Boolean
顶多在主程序用用
绝对不能在Dll、Ocx中用DoEvents