スレッド プールのスレッドから値を返すのは簡単ではありません。スレッド プールのキューに追加できるプロシージャは Sub プロシージャだけのため、関数呼び出しから値を返すという基本的な方法は使用できません。パラメータと戻り値を用意する方法の 1 つとして、パラメータ、戻り値、メソッドをラッパー クラスにラップするやり方があります。その方法については、「マルチスレッド プロシージャのパラメータと戻り値」を参照してください。
この方法よりも簡単にパラメータと戻り値を用意するには、QueueUserWorkItem メソッドの省略可能な ByVal 状態オブジェクト変数を使用します。この変数を使用してクラスのインスタンスへの参照を渡すと、インスタンスのメンバをスレッド プールのスレッドで変更し、戻り値として使用できます。
値によって渡される変数の参照先オブジェクトを変更できるかどうかが明確でない場合もあります。これを変更できるのは、オブジェクト参照のみが値渡しされるからです。オブジェクト参照によって参照されるオブジェクトのメンバに変更を加えると、実際のクラス インスタンスに変更が適用されます。
状態オブジェクトの中の値を返すために構造体を使用することはできません。構造体は値型であるため、非同期プロセスで変更しても、元の構造体のメンバを変更することはできません。構造体は、戻り値を必要としないときに、パラメータを指定するために使用してください。