在 VB.NET 中将带有事件的异步调用转换为同步

Convert asynchronous call with events to synchronous in VB.NET

我有一个组件被分配了一个异步执行的任务。完成后,它将触发两个事件之一以表示成功或失败。我需要将所有这些转换为同步调用:

Public Function AssignTask(o As Object) as Boolean
    Dim component As New X.Y.Z.Component()
    component.DoSomethingWith(o)
    AddHandler component.OnSuccess, AddressOf OnSuccess
    AddHandler component.OnError, AddressOf OnError

    Return True 'Need to return success or not.
End Sub

Private Sub OnSuccess(sender As Object, e As System.EventArgs)
    'Success! :)
End Sub

Private Sub OnError(sender As Object, e As System.EventArgs)
    'Error! :(
End Sub

我很困惑,关于如何让事件触发主方法成功或失败。

谢谢!

你可以这样做(这不是线程安全的,所以如果你为不同的线程调用它就不会很好地发挥作用)

Private _completedFlag As Boolean
Private _completionResult As Boolean

Public Function AssignTask(o As Object) as Boolean
    Dim component As New X.Y.Z.Component()
    _completedFlag = False
    AddHandler component.OnSuccess, AddressOf OnSuccess
    AddHandler component.OnError, AddressOf OnError
    component.DoSomethingWith(o)
    Do Until _completedFlag
        'wait
    Loop
    Return _completionResult
End Sub

Private Sub OnSuccess(sender As Object, e As System.EventArgs)
    _completionResult = True
    _completedFlag = True
End Sub

Private Sub OnError(sender As Object, e As System.EventArgs)
    _completionResult = False
    _completedFlag = True
End Sub

我已将 AddHandler 移动到您实际调用该方法之前,因为它有可能在附加处理程序之前完成