VB6 DoEvents无法正常工作

时间:2011-11-22 07:40:29

标签: multithreading events vb6 doevents

我正在使用专有的VB6 COM库。该库有一些功能可以触发,一旦完成事件,我就会得到结果。

容器类:

Private WithEvents myObj As proprietaryObj
Public status as Integer
Set myObj = new proprietaryObj
status = 1
Call myObj.DoIt1()

...

' Call back event function
Private Sub myObj_Done(ByVal Code As Long)
    ...
    MsgBox "Finished"
    status = 2
End Sub

所以一切顺利(经过验证)。我想要做的是将上面的代码+更多地封装在一个类中,这样我就可以包装多个需要堆栈的函数,或者在成功的回调报告之后连续执行。

所以我继续这样做:

Call myObj.DoIt1()
Do
    If myObj.Status = 2 Then Exit Do
    If myObj.Status = -1 Then Exit Do 'Error
    DoEvents
Loop
call myObj.DoIt2()

我得到了“完成”对话框,但是DoIt2从不会触发。事实上,如果我在看到“完成”消息后运行调试时暂停我的代码,则代码当前正在执行DoEvents,而myObj.Status = 1就像从未触及过一样。

几乎看起来好像是为一个单独的线程创建了一个不同的对象实例?在继续执行下一个DoIt2()之前,如何安全正确地等待事件回调激活?

1 个答案:

答案 0 :(得分:4)

您需要使用本地status变量,因为这是您设置为2的内容:

Call myObj.DoIt1()
Do
    If status = 2 Then Exit Do
    If status = -1 Then Exit Do 'Error
    DoEvents
Loop
call myObj.DoIt2()

否则,您也可以在致电status = 2之前尝试设置MsgBox "Finished"