That would just make things unnecessarily complex for the common use case where you just want to trigger a function every X milliseconds.
Since it is easy enough to move a timer to a secondary thread, there is no need to make the common case more complex by forcing multithreading into the application.
Your example demonstrates actually very well that multithreading is something one has to explicitly thing about.
The primary objective should always be to keep the UI from becoming unresponsive. Blocking its thread with a long running operation is very bad for that goal.
Instead of looking for a way to keep the timer responsive, you should be looking at keeping the UI responsive.
The part that should run in the secondary thread is the part that blocks, the code that takes long to execute.
Cheers,
_
Bookmarks