VB6 однопоточный.По сути (за исключением элементов управления ActiveX на секунду) есть только поток GUI.
Он сидит там, ожидая события.Вы получаете данные, поэтому он входит в обработчик событий для вашего элемента управления MSComm и начинает делать некоторый доступ к базе данных.Блокирует ожидание ответа базы данных.Другой элемент управления MSComm получает данные и запускает событие.Это событие просто находится в очереди событий Windows.Поток GUI должен выйти из обработчика события, прежде чем он сможет обработать другое событие MSComm.
Конечно, в середине обработчика события вы можете вызвать DoEvents
.Я настоятельно рекомендую вам делать это редко, если вообще когда-либо.По моему опыту, это источник многих трудных ошибок.
Есть способов поставить в очередь долгосрочную работу базы данных в фоновом потоке (используя вызов в управляемый код .NET, в этомдело).Это позволит вашему коду обработчика событий продолжаться практически сразу, без блокировки, что позволит ему обрабатывать следующее сообщение.Насколько мне известно, нет никакого собственного способа сделать это на VB6.