Quando si a a che fare con System.Threading.Thread la domanda ricorrente è: "Come faccio a passare dei parametri alla funzione invocata dal Thread?", la risposta è nota, però val la pena notare che nel framework 2.0 oltre al solito delegate ThreadStart è apparso un ParametrizedThreadStart che permette di passare al thread i parametri che ci servono.

Int32[] values ={ 3, 4, 8 };
ParameterizedThreadStart ps = new ParameterizedThreadStart(ts);
Thread t = new Thread(ps);
t.Start(values);

private void ts(object o)
{
 Int32[] values = (Int32[])o;
 foreach(Int32 i in values)
 {
   System.Diagnostics.Debug.WriteLine(i.ToString());
 }
}