0
我正在使用专有的VB6 COM库。图书馆有一些功能可以触发,我通过活动完成一次结果。VB6 DoEvents不按预期工作
容器类:
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永远不会触发。事实上,如果我在看到“Finished”消息后运行调试时暂停我的代码,那么代码当前正在执行DoEvents,并且myObj.Status = 1就好像它从未被触摸过一样。
它几乎看起来好像是为一个单独的线程创建了一个不同的对象实例?在继续执行下一个DoIt2()之前,如何安全正确地等待事件回调触发?
破入代码将在作为的DoEvents几乎certianly暂停是当它会收到中断消息。 Ctrl + Break将在任何地方接收,并可能在其他地方破解。 – Deanna