По умолчанию приложение WPF имеет один поток - основной поток пользовательского интерфейса, и все элементы управления / окна пользовательского интерфейса создаются и связываются с ним.В этом случае я не вижу никаких преимуществ в использовании нескольких диспетчеров и таймеров диспетчера, поскольку в любом случае таймер диспетчера будет делегировать все сообщения в связанный цикл сообщений соответствующего диспетчера, который будет циклом сообщений основного потока пользовательского интерфейса.
Но если вы создали несколько элементов управления в отдельных рабочих потоках, таких как
var thread = new Thread(() =>
{
CustomWindow wnd = new CustomWindow();
};
, и также отправили бы сообщения в это окно - тогда имеет смысл создать новый диспетчер и связать его споток, созданный вручную, поэтому в основном каждый Dispatcher будет связан с собственным потоком, поэтому отношение равно 1: 1.
Относительно метода atick - он будет выполняться в связанном с потоком Dispatcher.Если вы не создали диспетчер, связанный с созданным вручную рабочим потоком, то по умолчанию диспетчер WPF, связанный с основным потоком пользовательского интерфейса,
MSDN:
Причины использования DispatcherTimer в отличие от System.Timers.Timer заключаются в том, что DispatcherTimer работает в том же потоке, что и Dispatcher, и DispatcherPriority можно установить для DispatcherTimer