You have more control with System.Threading.Timer. You can program a timer to check for a specific thread or event that everyone will say .... 1/4 of a second until it starts, and then you can recycle the timer using the dispose method. This is much more flexible because you can program it to do whatever you want, and it is much more accurate.
When you use Thread.Sleep, you really only have one parameter, and this forces the program to "sleep" in x seconds. As far as I know, you cannot dispose of it, time, coordinate it, so that it stops earlier. etc. The bottom line is that even after completing your program, Thread.Sleep will continue to make the program sleep. Threading.Timer can be programmed to stop when the program terminates.
source share