Как мне отложить выполнение кода в Visual Basic (VB6)?

StackOverflow https://stackoverflow.com/questions/95112

  •  01-07-2019
  •  | 
  •  

Вопрос

У меня есть долго выполняющийся процесс в VB6, который я хочу завершить перед выполнением следующей строки кода.Как я могу это сделать?Встроенная функция?Могу ли я контролировать, как долго ждать?

Тривиальный пример:

Call ExternalLongRunningProcess
Call DoOtherStuff

Как мне отложить "допрос"?

Это было полезно?

Решение

VB.Net:Я бы использовал Подождите дескриптор события.

VB 6.0:Я видел цикл DoEvents.

Do
     If isSomeCheckCondition() Then Exit Do
     DoEvents
Loop

Наконец-то ты мог просто поспать:

Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)

Sleep 10000

Другие советы

В то время как у Нецио ответ (DoEvents) будет работать, это приведет к тому, что ваше приложение будет использовать 100% одного процессора.Режим сна сделает пользовательский интерфейс невосприимчивым.Что вам нужно, так это сочетание этих двух факторов, и волшебная комбинация, которая, кажется, работает лучше всего, это:

Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)

While IsStillWaitingForSomething()
    DoEvents
    DoEvents
    Sleep(55)
Wend

Почему два события выполняются, а одно переходит в режим ожидания на 55 миллисекунд?Время ожидания в 55 миллисекунд - это наименьший фрагмент, который может обработать VB6, и иногда требуется использование двух DoEvents в случаях, когда требуется сверхответственность (не API, но если ваше приложение реагирует на внешние события, SendMessage, прерывания и т.д.).

Как определить, Когда Завершился Обработанный процесс:

Если вы вызываете внешний процесс, то вы, по сути, вызываете его асинхронно.Обратитесь к приведенному выше документу службы поддержки MS о том, как дождаться завершения вашего внешнего процесса.

Разбейте ваш код на 2 процесса.Запустите первый, затем запустите свой "долго выполняющийся процесс", затем запустите второй процесс.

Запустите свой длительный процесс в середине текущего процесса и дождитесь его завершения.

Я бы хотел, чтобы вы могли просто добавить .net framework system.dll или что-то еще в ссылки на свои проекты, чтобы вы могли просто сделать это:

Dim ALongTime As Integer = 2000
System.Threading.Thread.Sleep(ALongTime)

...каждый раз.У меня есть VB6 и VB.net 2008 на моей машине, и мне всегда сложно переключаться между очень разными IDE.

System.Threading.Thread.Sleep(500)

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top