There are some aspects related to access to cross-thread shared data and thread parameters which led me (on the base on long well-known ideas, no big inventions here :-)) to the idea of importance and great benefits of wrapping a thread in a separate class, especially in .NET, where a thread start method can be an instance (non-static method). In this case, you can pass full access of the wrapper instance to the thread method. Besides, it helps to encapsulate access to the shared data (that it, its locking mechanism) which can be stored in the thread wrapper.
For further detail, please see my past answers:
How to pass ref parameter to the thread[
^],
with lock:
Change parameters of thread (producer) after it is started[
^],
MultiThreading in C#[
^].
The CodeProject member VSNetVbHarry was so nice to provide a VB.NET sample code:
Passing arguments to a threaded LongRunningProcess[
^].
I hope C# used in my answer won't prevent you from understanding the approach. In all cases, your follow-up questions will be welcome.
[EDIT]
And your question itself, as it is formulated, is answered in my comment to the question.
—SA