Начать использовать функцию? - PullRequest
2 голосов
/ 22 октября 2010

Этот саб отлично работает:

Private Sub UpdateInfo(ByVal text As String, ByVal timeStamp As DateTime)
    If Me.lstStatus.Dispatcher.Thread Is System.Threading.Thread.CurrentThread Then
        ' Do stuff with 
    Else
        Me.Dispatcher.BeginInvoke(System.Windows.Threading.DispatcherPriority.Send, New Action(Of String, DateTime)(AddressOf UpdateInfo), text, timeStamp)
    End If
End Sub

Но эта функция не:

Private Function UpdateInfo(ByVal text As String, ByVal timeStamp As DateTime) As ListItem
    If Me.lstStatus.Dispatcher.Thread Is System.Threading.Thread.CurrentThread Then
        Dim l As New ListItem
        ' Do stuff with 
        Return l
    Else
        Me.Dispatcher.BeginInvoke(System.Windows.Threading.DispatcherPriority.Send, New Action(Of String, DateTime)(AddressOf UpdateInfo), text, timeStamp)
        ' Above line doesn't return anything??
    End If
End Function

Как мне вернуть мой список в функции выше?

Спасибо !!!!!

:) Mojo

Ответы [ 2 ]

9 голосов
/ 22 октября 2010

Dispatcher.BeginInvoke () - это метод «забыл и забыл», цель делегата запускается через некоторое время в потоке пользовательского интерфейса.Это не достаточно хорошо в вашем случае, вам нужно подождать, пока цель не запустится, чтобы вы могли получить возвращаемое значение.Вместо этого используйте метод Invoke ():

 Return DirectCast(Me.Dispatcher.Invoke(..), ListItem)

И используйте Func вместо Action.Или AddressOf, более «естественный» способ VB.NET.

2 голосов
/ 22 октября 2010

Используйте возвращаемое значение метода BeginInvoke типа DispatcherOperation.

Для получения дополнительной информации читайте:

http://msdn.microsoft.com/en-us/library/ms591206.aspx

http://msdn.microsoft.com/en-us/library/system.windows.threading.dispatcheroperation.aspx

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...