したがって、この人物のコードがhttp://www.codeproject.com/KB/cs/Threadsafe_formupdating.aspxのVB.NETに変換されたコメントセクションから、クロススレッドUIのものを呼び出すのに役立つ小さなコードが示されています。
<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拡張メソッドのタイプパラメータのデータ型'PublicFunction SafeInvoke(Of TResult)(ByRef call As System.Func(Of frmLogin、TResult))As TResult' defined in'GvE.Globals'これらの議論から推測されます。データ型を明示的に指定すると、このエラーが修正される場合があります。C:\ GvE \ GvE \ frmLogin.vb 37 9 GvE
私は何が欠けていますか?フォームで定義されたメソッド内からそのコードを呼び出していますが、そのメソッドは別のスレッドから呼び出されています。
デリゲートを避けようとしているだけで、これは上記のコードが実行することになっていることですが、それを機能させることはできません。
ありがとう