2010-10-22 5 views
2

Cette sous fonctionne très bien:BeginInvoke utilisant une fonction?

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 

Mais cette fonction ne:

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 

Comment puis-je retourner mon listitem en fonction ci-dessus?

Merci !!!!!

:) Mojo

Répondre

9

Dispatcher.BeginInvoke() est une méthode et oublier le feu, la cible délégué court à un moment plus tard sur le thread d'interface utilisateur. Ce n'est pas assez bon dans votre cas, vous devez attendre que la cible fonctionne pour que vous puissiez obtenir la valeur de retour. Utilisez la méthode Invoke() à la place:

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

Et utilisez Func au lieu de Action. Ou AddressOf, le moyen le plus «naturel» de VB.NET.

+0

Que puis-je dire ?? Vous êtes super! Bon sang tu enlèves beaucoup de frustrations. Je voulais juste vous faire savoir que votre aide est tellement appréciée !!!!! Merci! :) – MojoDK

Questions connexes