• 1000 я сейчас делаю)
Допустим, у вас есть два модуля класса, AsyncClassModule
Public Event ExampleEvent()
Public Sub DoSomethingAsynchronous()
'Some operation would run here, then fire the event when complete
'In the real case I'm working with, this is an external library I can't control
RaiseEvent ExampleEvent
End Sub
и CallerClassModule
Private WithEvents x As AsyncClassModule
Private Sub Class_Initialize()
Set x = New AsyncClassModule
x.DoSomethingAsynchronous
'This is the issue; need to somehow wait for asynchronous operation to complete before proceeding
MsgBox "All done!"
End Sub
Что бы я хотел нужно сделать, после вызова DoSomethingAsynchronous
приостановить выполнение кода до тех пор, пока ExampleEvent
не сработает. В настоящее время я просто занят и жду, например:
Private WithEvents x As AsyncClassModule
Private asyncOperationComplete As Boolean
Private Sub Class_Initialize()
Set x = New AsyncClassModule
asyncOperationComplete = False
x.DoSomethingAsynchronous
While Not asyncOperationComplete
DoEvents
Sleep 1000
Wend
MsgBox "All done!"
End Sub
Private Sub x_ExampleEvent()
asyncOperationComplete = True
End Sub
Есть ли в этой ситуации альтернативы циклу, которые не будут занимать процессорное время во время ожидания? В псевдокоде в идеале я бы хотел что-то вроде этого:
x.DoSomethingAsynchronous
Pause until x.ExampleEvent fires
MsgBox "All done!"