2016-07-21 16 views
1

私は、非同期に実行するタスクが割り当てられたコンポーネントを持っています。終了すると、成功か失敗かを示す2つのイベントのいずれかが発生します。私は同期呼び出しにこのすべてを変換する必要があります。イベントを伴う非同期呼び出しを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 

私はイベントはmainメソッドに成功または失敗をトリガするために取得する方法のように、混乱しています。

ありがとうございました!

答えて

1

あなたが実際にメソッドを呼び出す前に、私はAddHandler命令を移動している。このような何か(これはスレッドセーフではないので、あなたは、異なるスレッドのためにこれを呼び出すとうまく再生されません)

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 

を行うことができますハンドラが添付される前に完了する可能性があるので、

+0

ありがとう!きれいでシンプルなソリューション。 – Manolis

関連する問題