Приложение WPF запускает Threading.Timer в начале процесса загрузки. Интервал таймера составляет 100 мс, а код в делегате таймера обычно занимает около 70 мс (он выполняет ряд операций в циклах for
, некоторые из которых связаны с чтением из последовательного порта). После запуска таймера остальная часть приложения инициализируется (типы, зарегистрированные в каркасе DI, создание представлений, режимы просмотра, различные другие функции инициализации). За эти несколько секунд код, выполняемый в пределах делегата таймера, полностью «ложится». Он никогда не выходит из строя, и ни один из его серийных прочтений не проходит (это просто удача) - код таймера просто приостанавливает выполнение в течение примерно 3 секунд.Почему Threading.Timer делегирует остановку?
Я могу только предположить, что весь этот материал для запуска (в потоке пользовательского интерфейса) получает более высокий приоритет, не позволяя потоку таймера получать какое-либо время процессора. Могу ли я что-нибудь сделать? Запуск таймера позже в процессе начальной загрузки может быть вариантом, но я хотел сначала изучить другие решения.
На боковой ноте, как Threading.Timer обрабатывает «повторное включение» (если это правильный термин), т. Е. Таймер «галочки», пока предыдущий вызов все еще запущен? Выполняет ли следующий вызов «очередь в очереди» и запускается, когда предыдущий завершается, или мне нужно самому справиться с этим?