For passing data into thread I recommend using a thread wrapper. It uses the fact that the thread method could be an instance method (non-static) and hence pass "this" to the thread, but to be effective, the instance of the type passes should be some class wrapping the thread object. It also provides nice encapsulation and abstraction of thread synchronization.
For more detail, please see my past answers where I explain this technique:
How to pass ref parameter to the thread[
^],
change paramters of thread (producer) after it started[
^].
This is a nice translation to VB.NET by VSNetVbHarry:
Passing arguments to a threaded LongRunningProcess[
^].
For better understanding of how instance methods work (in case you need it, of course), please see my other answer:
What makes static methods accessible?[
^].
—SA