Как получить результат метода, называемого асинхронно? - PullRequest
0 голосов
/ 25 января 2010

, чтобы не блокировать пользовательский интерфейс моих приложений при длительной операции, которую я использую:

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?

Заранее спасибо!

1 Ответ

2 голосов
/ 25 января 2010

Действие - указатель на функцию, которая не принимает аргументов и не возвращает значений. Если вы хотите, чтобы ваша функция возвращала какое-то значение, вам нужно использовать другой делегат. Например, вы можете использовать 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...