First, CodeProject is your friend: "Microsecond and Millisecond C# Timer" [
^] (April, 2013). I think the content in that article can be adapted to meet your needs, since the author is dealing with a case where 0.8 ms. second accuracy (most of the time) is needed.
Without knowing a great deal more about what the method you need to execute 20 times per second
is, and its
behavior (callbacks ?), and the context of its use (threading ? explicit use of #n cores on a multi-core cpu ?) it's difficult to say much except that you can definitely exclude using the System.Windows.Forms.Timer (limited to about 55ms. accuracy, or less, I read somewhere).
Given the System.Threading.Timer uses the ThreadPool, and is commonly not used in WinForm applications, using that one may be questionable here.
System.Timers.Timer seems like the best candidate for your use; have you tried that ? The author of the article cited suggests its accuracy is about 15ms. which would meet your needs.
Given what you know (or can estimate) of the time it will take to execute the code in the method, are you sure your current hardware/software configuration is capable of executing the method 20 times per second ?
Will the method always take the same exact time to execute ?