You don't get to tell it which thread to use. The Timer doesn't even know which thread it's doing use! From the documentation:
System.Threading.Timer, which executes a single callback method on a thread pool thread at regular intervals.
You cannot force a thread to execute code whenever you want. The target thread determines when it will accept an Invoke. The only way I know if doing something like this is to implement a kind of message pump with a SynchronizationContext in your target thread.
The most complete explanation I know of for this is
here[
^], complete with examples of implementation.