Вы должны использовать цикл in-in
. Но будьте очень осторожны при использовании этого типа цикла, потому что это зациклирует все свойства вдоль цепи прототипа.
Поэтому , при использовании for-in циклов всегда используйте метод hasOwnProperty
, чтобы определить, действительно ли текущее свойство в итерации является свойством объекта, который вы проверяете:
for (var prop in p) {
if (!p.hasOwnProperty(prop)) {
//The current property is not a direct property of p
continue;
}
//Do your logic with the property here
}
VB6 не является действительно приятной атмосферой для многопоточных приложений. Нет никакой программной поддержки, необходимо копаться в стандартных функциях WinAPI. Смотрите на эту статью, которая предоставляет вполне всесторонний образец:
Если проблемой, которую Вы пытаетесь решить, является долгое вычисление, и Вы хотите сохранить UI быстро реагирующим, то одна возможность состоит в том, чтобы часто звонить DoEvents
функционируйте в рамках своего долгого вычисления. Таким образом, Ваша программа может обработать любые сообщения Windows, и таким образом UI ответит на пользовательские команды. Можно также настроить Кнопку отмены для передачи сигналов о процессе, который она должна закончить.
Если Вы сделаете это, то необходимо будет стараться отключить любые средства управления, которые могли вызвать проблему, такую как выполнение долгого процесса во второй раз после того, как это запустилось.
На нескольких проектах я реализовал асинхронную обработку в VB6 с помощью нескольких процессов. В основном имея рабочий поток в рамках активного exe проекта, который является отдельным от основного процесса. Рабочий exe может затем быть передан любые данные, в которых это нуждается и запустило, сгенерировав назад событие, чтобы сказать, что это закончено или существуют данные для основного процесса.
Это - больше голодного ресурса (дополнительный процесс, а не поток), но VB6 работает в единственной потоковой квартире и не имеет никого созданным в поддержке того, чтобы начать новые дискуссии.
Если бы у Вас действительно должно быть несколько потоков в рамках одного процесса, я предложил бы смотреть на использование .NET или VC6, а не VB6.