Элементы управления .NET Timer работают быстрее, а окно свернуто - PullRequest
3 голосов
/ 30 января 2010

Это действительно заметная разница, которую я видел, но не могу объяснить. Эти таймеры имеют интервалы, установленные на 1 мс (самый низкий из доступных), но, хотя он минимизирован, кажется, тикает быстрее? Может ли кто-нибудь объяснить мне это явление? И если возможно, объясните, как воспроизвести эффект, когда окно развернуто?

Ответы [ 2 ]

3 голосов
/ 30 января 2010

Это Forms.Timer?

Я сомневаюсь, что он работает быстрее, более вероятно, что событие срабатывания таймера обрабатывается более своевременно. Несмотря на то, что свёрнутый объем будет меньше сообщений, обрабатываемых обработчиком сообщений окон формы, который может учитывать больший интервал времени для обработки сообщений таймера. Существует также вопрос минимального разрешения таймера.

Если применимо, попробуйте использовать один из других типов таймеров, например System.Timers

Компонент таймера Windows Forms однопоточный, и ограничен точность 55 миллисекунд. если ты требуется многопоточный таймер с для большей точности используйте класс Timer в пространстве имен System.Timers.

Ref .

2 голосов
/ 30 января 2010

Если я правильно помню, минимальное разрешение *1001*, которое вы можете получить из System.Windows.Forms.Timer (которое, как я полагаю, используется здесь), составляет 55 мс. Установка его в 1 мс по существу означает, что он тикает непрерывно.

Конечно, таймер не гарантирует, что тики будут приходить с точно указанным интервалом. Если ваше приложение занято другими делами (например, перерисовкой экрана), это может занять несколько мс или значительно больше при большой нагрузке. Если для таймера установлен интервал в 1 секунду, вы не заметите этого, но при минимальном окне (55 мс) вы можете это сделать.

Когда приложение свернуто, появляется меньше других событий, которые могут прервать события таймера, прежде чем они сработают.

...