I'm not sure you can control the order in which delegates are invoked. Instead you could use a System.Timers.Timer object (which will execute on a thread pool thread) and a synchronized list of work items. You add work items to the list and the timer routine takes them off again.
Timers are a low priority message so can be delayed if other things are occurring, you could use a callback function instead, or a thread which wakes up after a specific amount of time.
Darka [Xanya] "I am not a slave to a god that doesn't exist."