この人のコードはhttp://www.codeproject.com/KB/cs/Threadsafe_formupdating.aspxでVB.NETに翻訳されたコメントセクションから、クロススレッド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データ型(S)型パラメータ(複数可)の中拡張メソッド '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:賞品ではありません。しかし、評判。 「質問に答えて助けてくれてありがとう」と言ってみてください。 –