The DispatcherTimer documentation makes things slightly clearer than the System.Timers.Timer documentation:
DispatcherTimer Class (System.Windows.Threading) | Microsoft Docs[^]:
If a System.Timers.Timer is used in a WPF application, it is worth noting that the System.Timers.Timer runs on a different thread than the user interface (UI) thread. In order to access objects on the user interface (UI) thread, it is necessary to post the operation onto the Dispatcher of the user interface (UI) thread using Invoke or BeginInvoke. Reasons for using a DispatcherTimer as opposed to a System.Timers.Timer are that the DispatcherTimer runs on the same thread as the Dispatcher and a DispatcherPriority can be set on the DispatcherTimer.
"These people looked deep within my soul and assigned me a number based on the order in which I joined." - Homer