因此,從人員代碼被翻譯爲VB.NET的註釋部分http://www.codeproject.com/KB/cs/Threadsafe_formupdating.aspx它顯示了一些代碼來幫助調用交叉線程UI的東西。VB.NET在另一個線程上調用BeginInvoke
<System.Runtime.CompilerServices.Extension()> _
Public Function SafeInvoke(Of T As ISynchronizeInvoke, TResult)(ByRef isi As T, ByRef [call] As Func(Of T, TResult)) As TResult
If isi.InvokeRequired Then
Dim result As IAsyncResult = isi.BeginInvoke([call], New Object() {isi})
Dim endResult As Object = isi.EndInvoke(result)
Return DirectCast(endResult, TResult)
Else
Return [call](isi)
End If
End Function
當我嘗試撥打下列但是我得到一個錯誤:
Me.SafeInvoke(Function(x) x.Close())
或
frmLobby.SafeInvoke(Function(x) x.Close())
錯誤1中的數據類型參數(一個或多個)的類型擴展方法'Public Function SafeInvoke(Of TResult)(ByRef call As System.Func(Of frmLogin,TResult))由於無法從這些參數中推斷'GvE.Globals'中定義的TResult'。明確指定數據類型可能會更正此錯誤。 C:\ GvE \ GvE \ frmLogin.vb 37 9 GvE
我錯過了什麼?我從表單中定義的方法中調用該代碼,但該方法正從另一個線程調用。
只是想避免代表,這是上面的代碼應該做的,但只是不能讓它工作。
感謝
您使用的是什麼版本的VB.Net? – SLaks
3.5 對不起米奇,我該怎麼辦?是否有某種接受答案按鈕,我應該點擊,這是否給予回答某種獎勵的人?對不起,我想我只是像對待任何其他論壇一樣對待,但也許我可以回去修復它。 – user441521
@ user441521:沒有獎品。但聲譽。想一想就像說:「感謝你爲回答我的問題和幫助我而付出的努力」 –