1

以前、次のようなマルチスレッド手法のコードを見たことがあります。

Private Delegate Sub TextBoxUpdateUI(ByVal txt As String)

Private t As Threading.Thread = New Threading.Thread(Sub() _
        If tb2.InvokeRequired Then 
            Dim tb_delegate As New TextBoxUpdateUI(AddressOf "This Sub")
            tb2.Invoke(tb_delegate, Text)
        Else
            tb2.Text = tb1.Text
        End If _
)

問題は、 Thread 引数内にいくつかの命令を記述できることです。私が見た例はよく覚えていませんが、よく覚えていれば、Lambda使用しようとしたようなものを使用していました。

しかし、上記のコードは機能しません。再現したかっただけですが、見た例を失ったので、正確な書き方がわかりません。

誰かがラムダを修正できますか?

また、AdressOfオペレーターのデリゲート行で、それを参照するように修正するにはどうすればよいですか?

4

3 に答える 3

1

AddressOfメソッドParameterizedThreadStartを Lambda を使用して割り当てることができます。

TextBoxUpdateUisub() を使用してメソッドをインライン で記述することもできますが、TextBoxUpdateUIデリゲートを宣言する必要があります。

例えば:

Delegate Sub TextBoxUpdateUI(ByVal text As String)

Lambda で使用する場合は、次のようになります。

   Dim MyThread As New Thread( _
            New ParameterizedThreadStart( _
                Sub()
                    If tb2.InvokeRequired Then
                         Dim tb_delegate As New TextBoxUpdateUI(Sub(x)
                                                               'Do your stuff here
                                                               tb1.Text = x
                                                           End Sub)
                        tb2.Invoke(tb_delegate, Text)
                    Else
                        tb2.Text = tb1.Text
                    End If
                End Sub))
于 2013-10-21T12:24:05.893 に答える