Hope someone can spot what is going on here, I've spent hours looking and I think it is impossible.
I have 2 for loops and this passes the counters to a thread for more processing. when I use more than one thread or do not add a wait in the for loop the threads are passed the same counters.
my code
public static List<Thread> TPool = new List<Thread>();
for (int i = 1; i <= 10; i++) {
  for (int m = 2; m <= 10; m++) {
    waitingThreadPooling(new ThreadStart(() => run_test(i, m)), 3);
    //wait(10);
  }
}
private static void run_test(int the_i, int the_m)
{
  string Test = "i:" + the_i + ", m:" + the_m;
  // more code
  Console.WriteLine(Test);
}
public static void waitingThreadPooling(ThreadStart start, int MaxThreads = 50)
{
  Pool_Threads_Remove_Dead(ref TPool);
  while (true)
  {
    if (TPool.Count < MaxThreads)
    {
      Thread _thread = new Thread(start);
      _thread.Start();
      TPool.Add(_thread);
      break;
    }
    else
    {
       Pool_Threads_Remove_Dead(ref TPool);
    }
    Wait(10);
  }
}
this outputs
i:1, m:4  <<<
i:1, m:4  <<< whats going on here???
i:1, m:3
i:1, m:5
i:1, m:6
i:1, m:8
i:1, m:7
 
    