Pregunta

Tengo un proceso de larga duración en VB6 que quiero finalizar antes de ejecutar la siguiente línea de código.¿Cómo puedo hacer eso?¿Función incorporada?¿Puedo controlar cuánto tiempo esperar?

Ejemplo trivial:

Call ExternalLongRunningProcess
Call DoOtherStuff

¿Cómo puedo retrasar 'DoOtherStuff'?

¿Fue útil?

Solución

VB.Net:Yo usaría un Espera uno identificador de eventos.

VB 6.0:He visto un bucle DoEvents.

Do
     If isSomeCheckCondition() Then Exit Do
     DoEvents
Loop

Finalmente, podrías simplemente dormir:

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

Sleep 10000

Otros consejos

Mientras que Nescio respuesta (DoEvents) funcionará, hará que su aplicación utilice el 100% de una CPU.La suspensión hará que la interfaz de usuario no responda.Lo que necesitas es una combinación de los dos, y la combinación mágica que parece funcionar mejor es:

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

While IsStillWaitingForSomething()
    DoEvents
    DoEvents
    Sleep(55)
Wend

¿Por qué dos DoEvents y uno duermen durante 55 milisegundos?La suspensión de 55 milisegundos es la porción más pequeña que VB6 puede manejar, y a veces se requiere el uso de dos DoEvents en casos en los que se necesita una gran capacidad de respuesta (no por la API, pero si su aplicación responde a eventos externos, SendMessage, Interupts, etc. ).

Cómo determinar cuándo ha terminado un proceso descascarado:

Si está llamando a un proceso externo, entonces, de hecho, lo está llamando de forma asincrónica.Consulte el documento de soporte de MS anterior para saber cómo esperar hasta que se complete su proceso externo.

Divide tu código en 2 procesos.Ejecute el primero, luego ejecute su "proceso de ejecución larga", luego ejecute el segundo proceso.

Ejecute su proceso de larga duración en medio de su proceso actual y espere a que se complete.

Desearía que pudieras agregar .net framework system.dll o lo que sea a las referencias de tu proyecto para poder hacer esto:

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

...cada vez.Tengo VB6 y VB.net 2008 en mi máquina, y siempre me resulta difícil cambiar entre los diferentes IDE.

System.Threading.Thread.Sleep(500)

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top