I agree with using a Thread rather than a Timer.
Unlike Sleep, Join "Blocks the calling thread until a thread terminates, while continuing to perform standard COM and SendMessage pumping."
http://msdn.microsoft.com/en-us/library/95hbf2ta(v=vs.110).aspx[
^]
So here's a simple little experiment in wrapping a Sleep in a Thread and then Joining on it:
public static void
SleepWalk
(
int millisecondsTimeout
)
{
System.Threading.Thread t = new System.Threading.Thread
(
delegate() { System.Threading.Thread.Sleep ( millisecondsTimeout ) ; }
)
{
IsBackground = true
,
Priority = System.Threading.ThreadPriority.Lowest
} ;
t.Start() ;
t.Join() ;
return ;
}
It seems to work.
I also agree that maybe you need to rethink your design.