Я опубликовал это как ответ на другой вопрос, но здесь применима и схема:
VB6, сам по себе, является однопоточным. Тем не менее, вы можете сделать его несколько многопоточным с помощью ActiveX EXE, которые запускаются в своем собственном процессе, но все еще привязаны к оригинальному VB6-созданному EXE.
В прошлом я использовал объект Timer в сочетании с ActiveX EXE. Этот подход даст вам возможность локализовать всю логику загрузки в одном месте, управлять ею так, как будто вы управляете обычным объектом, и запускать его в отдельном EXE, таким образом по умолчанию делая его многопоточным.
Итак, как это работает, так:
Вы вызываете метод LongRunningOperation для объекта ActiveX EXE
В методе LongRunningOperation вы создаете экземпляр Timer и запускаете его практически сразу.
Вы выходите из метода LongRunningOperation, тем самым возвращая управление объекту, который его вызвал.
Затем вы возвращаетесь к основному приложению через события (например, LongRunningOperationProgress или LongRunningOperationComplete и т. Д ...)
Я рекомендую Объект таймера от Карла Петерсена .