Member 14013003 Ответов: 2

Как использовать таймер без замораживания формы


как использовать таймер без замораживания формы

Что я уже пробовал:

как использовать таймер без замораживания формы

2 Ответов

Рейтинг:
5

CPallini

Вы можете заменить таймер, например, на BackgroundWorker объект. Видеть это CodeProject статья: Пример класса BackgroundWorker для начинающих[^].


Рейтинг:
0

OriginalGriff

Использование таймера не будет "замораживать форму", если вы не делаете что-то глупое: либо очень, очень короткий интервал, либо долго работающий метод в методе обработчика тиков таймера.

Таймеры не являются "волшебными пулями" - это события, которые подаются в ваш код через определенный интервал (или, по крайней мере, после этого интервала), так что ваш код может делать то, что нужно делать часто, например обновлять время или обратный отсчет на экране, отражать положение курсора в строке состояния и тому подобное. И как таковой, он работает на основном потоке, который также обрабатывает все остальное для формы. Если ваше время плюс другая обработка занимает слишком много времени, события рисования никогда не "достигают передней части очереди", поэтому форма yoru никогда не обновляется, и в крайних случаях ваши клики пользователя также никогда не обрабатываются.

Если вы хотите выполнить длительную задачу, даже если вы хотите, чтобы она выполнялась с определенным интервалом, вам нужно переместить ее в фоновый поток и обновить пользовательский интерфейс только тогда, когда он имеет результаты. Как предполагает CPallini, BackgroundWorker является хорошим выбором для этого, поскольку он включает в себя механизм для отчета о прогрессе / результатах обратно в поток mind - который является единственным потоком, который вообще может получить доступ к компонентам пользовательского интерфейса!