最近自己做了个activex控件,手动添加进程序后(即向其他控件一样,在写程序的时候就添加进去),想在程序关闭时卸载但是不知如何处理,是在ACTIVEX控件里面进行相应的属性设置处理关闭,还是可以在form_unload里面进行相应的处理,望各位高手大大指教。目前我只能用end关闭,但是编译成exe文件以后,发现资源没有完全释放,而且就是那个控件还没有释放。因为该控件是进行图像处理的,有时候关闭程序时控件还在进行图像处理没有处理完,所以只能在使用该控件的程序里面用end结束,我试过在空间里面加end语句,但是不支持,在程序里面用unload +控件名也不支持。

解决方案 »

  1.   

    什么资源没有释放?
    你是不是用到了DoEvents?
    对DoEvents的误用容易引起资源无法释放
      

  2.   

    做图像处理,用SetPixelV肯定慢
    用DIB快多了,可以实时完成,根本不需要DoEvents
    我以前写的用VB作DIB图像处理的文章(其中的连接早已失效):
    http://dev.csdn.net/develop/article/20/20442.shtmWallesCai(曾经沧海难为水,除却巫山不是云。此情可待成追忆,只是当时已惘然。)也写过几个例子:
    http://blog.csdn.net/WallesCai/
      

  3.   

    终于发现问题了,资源未释放是DoEvents引起的,我做了个延时函数
    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时资源未释放,谁有办法可以解决
      

  4.   

    做个属性,在 Form_Unload 中设为 True,
    在你的循环中判断为 True 时中断循环
      

  5.   

    在UserControl中定义一标志变量(如m_IsExit)
    在UserControl的Terminate事件中将m_IsExit设为True
    在DoEvents循环中检查m_IsExit
      

  6.   

    //或者谁有办法可以解决,图像特效(百叶窗,上移,中合等)处理时的延时。可以用Timer啊
      

  7.   

    经测试用timer的却可以解决以上问题,但是
    在UserControl中定义一标志变量(如m_IsExit)  
    在UserControl的Terminate事件中将m_IsExit设为True  
    在DoEvents循环中检查m_IsExit  
    无法解决。
    主要是我在Terminate中将m_show设为false,但是回到doevents循环中m_show又变成了true,真是奇怪,单步跟踪也没发现其他地方有赋值的。
    现在想问一下在UserControl中有没有可以用的向end一样的东西,我试过了,end,unload什么的都不行。
      

  8.   

    在控件模块的声明区输入:
    Private m_show as Boolean
      

  9.   

    //现在想问一下在UserControl中有没有可以用的向end一样的东西,我试过了,end,unload什么的都不行。DoEvents的作用是再建立一个消息循环,所以会发生重入现象,导致资源无法释放
    顶多在主程序用用
    绝对不能在Dll、Ocx中用DoEvents
      

  10.   

    哦,谢谢,看来只能用timer来做了,谢谢zyl910(910:分儿,我又来了!) .