Элементы управления таймером .NET работают быстрее, когда окно свернуто

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


person Gio Borje    schedule 30.01.2010    source источник
comment
Кстати, знаете ли вы, что это элемент управления .NET Timer, а не C#? Тот же элемент управления в VB.NET, F# и т. д.   -  person John Saunders    schedule 30.01.2010
comment
Извините, я имел в виду, что язык, который я использовал, был C #. Я просто случайно заказал его неловко.   -  person Gio Borje    schedule 30.01.2010


Ответы (2)


Это Forms.Timer?

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

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

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

Ссылка.

person Mitch Wheat    schedule 30.01.2010

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

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

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

person Aaronaught    schedule 30.01.2010
comment
+1 От меня. Твоя память лучше моей, мне пришлось посмотреть интервал таймера! - person Mitch Wheat; 30.01.2010