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'?

Foi útil?

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. ).

Como determinar quando um processo em shell foi encerrado:

Se você está chamando um processo externo, então você está, com efeito, chamando-o de forma assíncrona. Consulte o item acima documento MS Suporte para saber como esperar até que seu processo externo está completa.

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)

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top