Я работаю с проприетарной библиотекой 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 ()?