2010-01-25 31 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