Имейте в виду, что при создании экземпляра DispatcherTimer
с использованием конструктора по умолчанию (как вы это сделали) таймер Dispatcher
будет по умолчанию выполняться с DispatcherPriority.Background
! Отсюда высокая задержка.
Укажите более высокий приоритет с помощью соответствующего конструктора:
var dispatcherTimer = new DispatcherTimer(DispatcherPriority.Normal, Application.Current.Dispatcher)
Это должно решить вашу проблему.
Если задержка все еще слишком велика, попробуйте DispatcherPriority.Send
(используйте с care).
Если операция отправлена на Dispatcher
в DispatcherPriority.Send
, операция обходит очередь и сразу же выполняется.
В зависимости от интервала таймера и рабочей нагрузки, DispatcherPriority
должно быть как можно ниже, чтобы пользовательский интерфейс не становился медленным sh.
В качестве альтернативы, если Timers.Timer
или любой другой таймер работает лучше для вас, тогда просто используйте его. Вы можете выполнить соответствующий код пользовательского интерфейса, используя Application.Current.Dispatcher.Invoke(Action)
или Application.Current.Dispatcher.InvokeAsync(Action)
.