Ответ 1
VB6 не очень хорошая среда для многопоточных приложений. Нет готовой поддержки, вам нужно вникать в стандартные функции WinAPI. Взгляните на эту статью, в которой содержится довольно подробный пример:
Как реализовать многопоточность в Visual Basic 6.0. Было бы здорово, если бы кто-нибудь мог привести пример.
VB6 не очень хорошая среда для многопоточных приложений. Нет готовой поддержки, вам нужно вникать в стандартные функции WinAPI. Взгляните на эту статью, в которой содержится довольно подробный пример:
В нескольких проектах я реализовал асинхронную обработку в VB6 с использованием нескольких процессов. В основном есть рабочий поток в активном проекте exe, который отделен от основного процесса. Затем рабочий exe может быть передан все необходимые ему данные и начат, чтобы вернуть событие, чтобы сказать, что оно закончено, или имеются данные для основного процесса.
Это больше ресурсов, голодных (дополнительный процесс, а не поток), но VB6 работает в одной многопоточной квартире и не имеет встроенной поддержки для запуска новых потоков.
Если вам действительно нужно иметь несколько потоков в одном процессе, я бы предложил посмотреть на использование .net или VC6, а не на VB6.
Если проблема, которую вы пытаетесь решить, - это долгий расчет, и вы хотите, чтобы пользовательский интерфейс был отзывчивым, тогда одна из возможностей - часто называть функцию DoEvents
в рамках вашего длительного вычисления. Таким образом, ваша программа может обрабатывать любые сообщения Windows, и, таким образом, пользовательский интерфейс будет отвечать на команды пользователя. Вы также можете настроить кнопку "Отмена", чтобы сигнализировать о завершении процесса.
Если вы это сделаете, вам нужно быть осторожным, чтобы отключить любые элементы управления, которые могут вызвать проблему, например, запустить длительный процесс во второй раз после его запуска.
Вы можете использовать Инструментарий Interop Forms Toolkit 2.0 для многопоточности в VB6. Инструментарий позволяет вам использовать возможности .NET, не будучи вынужденным на обновление. Таким образом, вы также можете использовать элементы управления .NET User в качестве элементов управления ActiveX в VB6.