Нередко возникает необходимость копирования директории с ее структурой в другое место. Для этого идеально подходит метод FileSystemObject::CopyFolder, но во-первых он блокирует вызывающий поток до полного завершения, а также не имеет никаких интерфейсов для получения состояния процесса копирования. Для обхода первого ограничения достаточно всего-лишь вызвать метод в другом потоке, но второе ограничение уже никак не обойти (документированными способами).
В качестве пополнения примеров многопоточности для своего кирпича, я решил создать небольшое приложение позволяющее получать расширенную информацию во время копирования директории не блокирующее основной GUI поток. Для межпоточного обмена данными используется APC очередь, с помощью которой доставляется сообщение из потока копирования в главный поток. В качестве уведомления используется интерфейс ICopyFolderNotify, который реализуется необходимым объектом и получает уведомления из другого потока. Пример достаточно сложен, но содержит некоторые особенности работы с многопоточностью на VB6 (ручное копирование переменных между потоками).
Для работы нужно либо взять tlb отсюда, либо использовать DLL раскоментровав API vbCreateThread. Пример работает и в IDE и в скомпилированном виде (в IDE запуск в основном потоке).
Спасибо за внимание.
https://www.youtube.com/watch?v=85s420EJzYg