Wielowątkowość to odpowiedź. Standardowa aplikacja Delphi to po prostu aplikacja z pojedynczym gwintem, która może wykonywać jedną rzecz na raz. W związku z tym blokada GUI, nie może pozostać responsywna, jeśli robi coś innego.
Jeśli chcesz mieć reagujące gui i jednocześnie wykonywać ciężki lifting, musisz podnieść ciężki przedmiot w oddzielnym wątku lub nitkach. W ten sposób twój główny wątek może zapewnić, że masz program responsywny, a wątki robocze wykonują ciężki lifting. Działa to dobrze w przypadku ciężkiej pracy z bazami danych, ale również w przypadku pobierania plików lub sytuacji, w których odpowiedź na przykład zdalnego serwera może trwać długo.
Ale ta odpowiedź prawdopodobnie dostarczy więcej pytań niż odpowiedzi, ponieważ wyjaśnienie, W JAKI SPOSÓB używać wielowątkowości, byłoby zbyt dużym wyjaśnieniem tego pytania.
Jeszcze jedna rzecz: rzetelnie spójrz na kod bazy danych. W jaki sposób pobierasz rekordy z bazy danych, czy istnieją dobre indeksy w bazie danych itp. Itp. Możesz uzyskać szalone poprawki prędkości, optymalizując ten kod, zanim zaczniesz myśleć o wielowątkowości.
Znalazłem następujący zasób: http://thaddy.co.uk/threads/, który można pobrać ze zdjęciami pod adresem: http://cc.embarcadero.com/item/14809 jako bardzo przydatny samouczek gwintowania.
Spróbuj użyć aplikacji Application.HandleMessage. Przechowuj także LastPercentage jako zmienną. Obliczyć NewPercentage i wyjść, jeśli NewPercentage = LastPercentage. –
@CapeCodGunny Nie ma czegoś takiego. Masz na myśli 'Application.HandleMessage'? Dlaczego ta pomoc? –
@David - Dzięki, że zredagowałem mój komentarz. To włamuje się i wymusza tylko jedną aktualizację nie wszystkie oczekujące aktualizacje systemu Windows. –