我正在使用专有的 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() 之前,如何安全正确地等待事件回调触发?