У меня есть унаследованное приложение, в котором есть несколько "длительных" циклов, которые срабатывают в результате взаимодействия с пользователем. Временной код периодически обновляет что-то на экране с информацией о ходе работы (обычно это метка), а затем, по-видимому, убеждает, что визуальное обновление происходит там, а затем код вызывает Application.ProcessMessages(argh!).
Теперь мы все знаем, какие проблемы могут возникнуть в приложении GUI (будучи благотворительным, это было более невинное время назад), и мы находим, что это точно, как яйца, время от времени мы получаем пользователей, невозможно с программой, потому что они нажимают на элементы управления, пока программа "занята".
Какой лучший способ периодически обновлять визуальные формы формы без принятия других событий/сообщений и т.д.?
Мои мысли были либо;
- отключите все элементы управления, прежде чем делать что-нибудь много времени, и оставляя вызовы "... ProcessMessages", чтобы "принудительно" обновить, или
- найти другой способ периодического обновления элемента управления
Я могу сделать первое, но это оставило меня в недоумении - есть ли лучшее решение?
пример кода из наследия;
i:=0; while FJobToBeDone do begin DoStepOfLoop; inc(i); if i mod 100 = 0 then begin UpdateLabelsEtc; Application.ProcessMessages; end; end;
Я уже слышу, как ты обманываешься, сзади.: -)