2010-01-25 32 views
0

時,有一個很長的操作我用做不能阻止我的應用程序的UI:如何獲取異步調用方法的結果?

Public Sub ButtonHandler() handles Button 
    Dim auxDelegate as Action 

    auxDelegate = New Action(AddressOf DoAction) 
    auxDelegate.BeginInvoke(AddressOf EndAction,Nothing) 
End Sub 

Private Sub DoAction() 
    ''# Do long time operations here 
End Sub 

Private Sub EndAction() 
    ''# Update results here 
End Sub 

有沒有辦法採取DoAction的結果的情況下,這是一個功能,而不是Sub和在EndAction中使用那個定義類屬性的結果,並把值放在那裏?

例如,如果DoAction是這樣的:

Private Function DoAction() As Boolean 
    return True 
End Sub 

有服用DoAction的結果在EndAction的方法嗎?

在此先感謝!

回答

2

Action是一個函數指針,它不接受任何參數並且不返回任何值。如果你想讓你的函數返回一些值,你需要使用一個不同的委託。例如,你可以使用Func(Of Boolean),如果你希望你的函數返回一個布爾值:

Dim auxDelegate As Func(Of Boolean) 

Public Sub ButtonHandler() handles Button 
    auxDelegate = AddressOf DoAction 
    auxDelegate.BeginInvoke(AddressOf EndAction, Nothing) 
End Sub 

Private Function DoAction() As Boolean 
    Return True 
End Function 

Private Sub EndAction(ByVal ar As IAsyncResult) 
    ' call EndInvoke on the delegate to obtain the result 
    Dim result As Boolean = auxDelegate.EndInvoke(ar) 
End Sub 
+0

謝謝!你是對的,那正是我想要的! – 2010-01-25 10:01:59