I by no means am an expert in threading but here is what i can gather from this.
you are using 'ThreadPool.QueueUserWorkItem' which queues the item into the current main thread.
What you need to do is create a whole new thread which i did not see.
which is something like:
myThread = new System.Threading.Thread(new
System.Threading.ThreadStart(myStartingMethod));
myThread.Start();
that creates a seperate thread from the main with a method to initialze it.
the locks go in functions that are shared by more then one thread, which could be a single function to change data in the array then a seperate function for sorting.