> > ' (3) ラムダ式を使用する ラムダ式でのSubはVB10, Visual Studio 2010から > Sub StartThread3() > Dim thread As New Thread(Sub() WriteText("test")) > thread.Start() > End Sub
// 質問内容のどこにも「非同期デリゲートとスレッドプール」が関わっていませんが…。
3つぐらい方法は考えられます。
' 画面反映用の共通メソッド
Sub WriteText(ByVal line As String)
If Me.InvokeRequired Then
Me.BeginInvoke(New Action(Of String)(AddressOf WriteText), line)
Return
End IF
Me.TextBox1.Text = line
End Sub
' (1) ParameterizedTrheadStartを使用する .NET 1.1から
Sub StartThread1()
Dim thread As New Thread(AddressOf Me.WriteText)
thread.Start("test")
End Sub
Sub WriteText(ByVal line As Object)
Dim strLine = CStr(line)
Me.WriteText(strLine)
End Sub
' (2) Classを使用する Action(Of T)は.NET 2.0から
Sub StartThread2()
Dim worker As New Worker("test", AddressOf Me.WriteText)
Dim thread = new Thread(AddressOf worker.DoWork)
thread.Start()
End Sub
Class Worker
Public Sub New(ByVal line As String, ByVal reporter As Action(Of String))
Me.m_Line = line
Me.m_Reporter = reporter
End Sub
Private m_Line As String
Private m_Reporter As Action(Of String)
Public Sub DoWork()
Me.m_Reporter(Me.m_Line)
End Sub
End Class
' (3) ラムダ式を使用する ラムダ式でのSubはVB10, Visual Studio 2010から
Sub StartThread3()
Dim thread As New Thread(Sub() WriteText("test"))
thread.Start()
End Sub
'WriteLinesメソッドを別スレッドで呼び出す 'スレッドの作成 Dim t As New System.Threading.Thread( New System.Threading.ThreadStart( AddressOf WriteLines)) 'スレッドを開始する t.Start() End Sub
'別スレッドで実行するメソッド Private Sub WriteLines() '現在のスレッドの名前を取得(ここで本日の日付のストリングデータが受け渡されます) Dim threadName As String = ystem.Threading.Thread.CurrentThread.Name
'WriteLineDelegateの作成 Dim dlg As New WriteLineDelegate(AddressOf WriteLine)
'TextBox1に文字列を追加する Dim count As Integer = CInt(Me.Invoke(dlg, New Object() {threadName})) End Sub
'TextBox1に文字列を追加する Private Function WriteLine(ByVal str As String) As Integer