这个子工作正常:
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
如何在上面的函数中返回我的listitem?
感谢!!!!!
:) 魔
答案 0 :(得分:9)
Dispatcher.BeginInvoke()是一种即发即弃的方法,委托目标稍后在UI线程上运行。在你的情况下,这还不够好,你需要等到目标运行,这样你才能获得返回值。改为使用Invoke()方法:
Return DirectCast(Me.Dispatcher.Invoke(..), ListItem)
并使用Func代替Action。或者AddressOf,更“自然”的VB.NET方式。
答案 1 :(得分:2)
使用类型为BeginInvoke
的{{1}}方法的返回值。
欲了解更多信息,请阅读:
http://msdn.microsoft.com/en-us/library/ms591206.aspx
http://msdn.microsoft.com/en-us/library/system.windows.threading.dispatcheroperation.aspx