I'd spin off a thread, wrap it in a mutex, and force it to wait a second before releasing the lock. That way, in whatever process is generating these threads, each new thread will have to get in line before having access to the procedure.
The second thread will get spun off immediately, but will also immediately be queued because of the Mutex.
e.g.
{
Thread t = new Thread(()=>{DoSomething();}).Start();
Thread t2 = new Thread(()=>{DoSomething();}).Start();
}
private static Mutex _mutex = new Mutex();
private void DoSomething()
{
_mutex.WaitOne();
// Do Work
Sleep(1000);
_mutex.ReleaseMutex();
}
Optionally, if you really wanted to get specific, you could use the System.Diagnostics class to keep track of execution from start to finish of your procedure and make your Thread.Sleep only wait out the difference in execution time.
Kinda Hokey. =)