Это очень распространенная проблема, с которой время от времени сталкивается каждый разработчик, когда визуальные обновления могут быть настолько быстрыми и быстрыми, что это приводит к мерцанию содержимого формы. В настоящее время я использую поток для поиска файлов и запускаю событие в его вызывающем (основном VCL) потоке, чтобы сообщать о каждом результате поиска. Если вы когда-либо использовали FindFirst
/ FindNext
или выполняли какой-либо большой цикл, который выполняет очень быстрые и быстрые итерации, то вы должны знать, что обновление графического интерфейса на каждой маленькой итерации чрезвычайно тяжело и почти сводит на нет цель поток, потому что тогда поток становится зависимым от того, насколько быстро может обновляться графический интерфейс (на каждой итерации внутри потока).
То, что я делаю для каждого события из потока (может быть 100 событий за 1 миллисекунду), просто увеличивает глобальное целое число, чтобы подсчитать количество итераций. Затем я показываю этот номер в метке на главной форме. Как вы можете себе представить, быстрые обновления из потока приведут к тому, что это мерцание выйдет из-под контроля.
Итак, что я хотел бы знать, так это то, как избежать этого быстрого мерцания в графическом интерфейсе, когда поток передает ему события быстрее, чем он может обновляться?
ПРИМЕЧАНИЕ. Я использую стили VCL, поэтому мерцание становится еще хуже.