Цитата:
Сообщение от Aristarh Dark
При вызове функции копирования (а вызываешь ты ее из главного потока программы) поток тормозится до окончания выполнения функции, по сути ждет ее завершения. В это время никакие сообщения им не обрабатываются. И как бы ты не старался из паралельного потока изменить визуальные компоненты (а за их отрисовку отвечает главный поток программы) у тебя ничего не получится (не будем тут углублятся в вопрос о том, что поток изменения кнопки у тебя написан не правильно, сути дела это не меняет). Сообщения отправлненные главному потоку просто "толпятся" в очереди до окончания работы функции копирования файла. По большому счету - если функция копирования не вернет управление программе, то программа "зависнет" в ожидании. Из диспетчера задач это будет выглядеть так: "Программа не отвечает". Как только копирование завершено (функция вернула результат), главный поток программы начинает обрабатывать накопившуюся очередь сообщений, и программа "отвисает".
На примере такое поведение видно при установке некоторых игр (у которых инсталятор кривой). Если инсталятор игры содержит большой контейнер с файлами (архив), то при его открытии (для установки) антивурус перехварывает процедуру открытия файла и начинает проверять файлы из ахива, если файлов много (очень много или дофига) и инсталятор кривенький, то создается впечатление что установка зависла.
Вот примерно так.
|
Спасибо за объяснения

Да, правильно обновлять визуальные компоненты через Synchronize.
А почему, если вынести копирование файла в отдельный поток, то все остальные визуальные компоненты на форме можно изменять?