Como faço para atrasar a execução de código em Visual Basic (VB6)?
Pergunta
Eu tenho um processo de longa duração em VB6 que eu quero terminar antes de executar a próxima linha de código. Como eu posso fazer isso? Built-in função? Posso controlar o tempo de espera?
Trivial exemplo:
Call ExternalLongRunningProcess
Call DoOtherStuff
Como posso atrasar 'DoOtherStuff'?
Solução
VB.Net: Gostaria de usar um WaitOne identificador de evento.
VB 6.0:. Eu vi um DoEvents loop
Do
If isSomeCheckCondition() Then Exit Do
DoEvents
Loop
Finalmente, você poderia apenas dormir:
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
Sleep 10000
Outras dicas
Enquanto o Nescio (DoEvents) vai funcionar, ele fará com que seu aplicativo para usar 100% de uma CPU. Sono fará a interface do usuário sem resposta. O que você precisa é uma combinação dos dois, e a combinação mágica que parece funcionar melhor é:
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
While IsStillWaitingForSomething()
DoEvents
DoEvents
Sleep(55)
Wend
Por duas DoEvents, e um sono por 55 milissegundos? O sono de 55 milissegundos é o menor fatia que VB6 pode segurar, e usando dois DoEvents é por vezes necessária nos casos em que super-capacidade de resposta é necessário (não pelo API, mas se você aplicativo está respondendo a eventos externos, SendMessage, Interupts, etc. ).
Quebre seu código-se em 2 processos. Execute o primeiro, em seguida, executar o seu "processo de longa duração", em seguida, executar o segundo processo.
Executar o seu processo de longa duração no meio de seu processo atual e esperar por ele para ser concluído.
Eu desejo que você poderia apenas adicionar o system.dll framework .NET ou o que quer que suas referências do projeto de modo que você pode simplesmente fazer isso:
Dim ALongTime As Integer = 2000
System.Threading.Thread.Sleep(ALongTime)
... cada vez. Eu tenho VB6 e VB.net 2008 na minha máquina, e sua sempre difícil para mim para alternar entre o muito diferente do IDE.
System.Threading.Thread.Sleep(500)