マルチスレッド メソッドの呼び出しにパラメータを指定する最良の方法は、クラスにターゲット メソッドをラップし、新規スレッドのパラメータとして機能するフィールドをそのクラスに対して定義することです。この方法の利点は、新規スレッドを開始するたびに独自のパラメータでクラスの新規インスタンスを作成できることです。たとえば、次のコードに示すように三角形の面積を計算する関数があるとします。
Function CalcArea(ByVal Base As Double, ByVal Height As Double) As Double
CalcArea = 0.5 * Base * Height
End Function
CalcArea 関数をラップして入力パラメータを格納するフィールドを作成するクラスを記述するコードは次のとおりです。
Class AreaClass
Public Base As Double
Public Height As Double
Public Area As Double
Sub CalcArea()
Area = 0.5 * Base * Height
MsgBox("The area is: " & Area)
End Sub
End Class
AreaClass を使用するには、次のコードに示すように AreaClass オブジェクトを作成し、Base プロパティと Height プロパティを設定します。
Protected Sub TestArea()
Dim AreaObject As New AreaClass
Dim Thread As New System.Threading.Thread _
(AddressOf AreaObject.CalcArea)
AreaObject.Base = 30
AreaObject.Height = 40
Thread.Start()
End Sub
TestArea プロシージャは CalcArea メソッドの呼び出し後に Area フィールドの値を確認しないことに注意してください。CalcArea は別のスレッドで実行されるため、Thread.Start を呼び出した直後に確認する場合は、Area フィールドが設定されているとは限りません。次のセクションでは、マルチスレッド プロシージャから値を返す適切な方法について説明します。