Я столкнулся со странной вещью в своем приложении WPF. Я экспериментировал с классами DispatcherTimer и System.Timers.Timer и сравнивал время, потраченное на секундомер. Когда я использую DispatcherTimer, кажется, что почти нет разницы в интервале, отображаемом моим приложением, а также секундомером (проверено в течение 30 минут). Но когда я использую другой таймер, я значительно теряю время в своем приложении. Я мог бы использовать DispatcherTimer, но вот проблема: когда я обновляю свой пользовательский интерфейс из другого места, таймер диспетчера, кажется, зависает на этот конкретный интервал и, следовательно, он также теряет время. Почему это происходит и как это исправить?
Диспетчер Таймер и Таймер
Ответы (1)
В комментариях @Joey предположил, что может помочь ответ на вопрос Сравнение таймера с DispatcherTimer. Ваш ответ был
Нет, я действительно написал после прочтения той ссылки. Я не понимаю, почему System.Threading.Timer теряет примерно столько времени. 3сек. через 5 мин. в то время как диспетчер ничего не теряет. если мой какой-то другой процесс вызывал эту задержку, то он также должен отражаться в диспетчере, я думаю
Однако если вы прочитали ответ на связанный вопрос, значит, вы уже получили свой ответ. Как там сказано, это потому, что класс Timer
оптимизирован для работы с приложениями Windows Forms, и вы используете его в приложении WPF. Это немного похоже на вождение машины по песку ... мы не должны этого делать, и мы можем получить неожиданные результаты.
Я предлагаю вам просто использовать правильный инструмент для работы. Также стоит отметить, что никакие компьютерные таймеры или даже класс Stopwatch
, который вы используете для получения результатов теста, не будут точными на 100%, поскольку процессор, на котором он работает, также будет использоваться для запуска. многие другие потоки одновременно.