2008-09-18 31 views
10

Tengo un proceso de larga ejecución en VB6 que quiero terminar antes de ejecutar la siguiente línea de código. ¿Cómo puedo hacer eso? Función incorporada? ¿Puedo controlar cuánto tiempo debo esperar?¿Cómo puedo retrasar la ejecución del código en Visual Basic (VB6)?

ejemplo trivial:

Call ExternalLongRunningProcess 
Call DoOtherStuff 

¿Cómo me retraso 'DoOtherStuff'?

+0

¿Puede darnos más detalles? ¿Es esto un proceso externo y, de ser así, cómo lo llamas? –

+0

Creo que se está refiriendo a la pulsación de teclas CTRL-P como se ofrece en MS Access? –

Respuesta

11

VB.Net: Utilizaría un identificador de evento WaitOne.

VB 6.0: He visto un DoEvents Loop.

Do 
    If isSomeCheckCondition() Then Exit Do 
    DoEvents 
Loop 

Por último, Se podía dormir:

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

Sleep 10000 
+1

DoEvents es lo que utilizarías para devolver el control a la GUI durante los procesos de larga ejecución. –

0

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

0

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

2

How To Determine When a Shelled Process Has Terminated

Si está llamando a un proceso externo a continuación, usted es, en efecto, que calificó de forma asíncrona. Consulte el documento de soporte de MS anterior para saber cómo esperar hasta que se complete su proceso externo.

15

Mientras que el answer (DoEvents) de Nescio funcionará, su aplicación usará el 100% de una CPU. El sueño hará que la IU no responda. Lo que necesita 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 de sueño durante 55 milisegundos? El tiempo de espera de 55 milisegundos es la porción más pequeña que puede manejar VB6, y el uso de dos DoEvents a veces es necesario en instancias en las que se necesita una gran capacidad de respuesta (no por la API, pero si la aplicación responde a eventos externos, SendMessage, Interupts, etc.)

+0

milisegundos Creo que querías decir. –

+0

Absolutamente, milisegundos ... –

+3

Te estoy votando por recordarme lo feliz que estoy de no tener que volver a hacer VB6 :-) – Matt

-3

System.Threading.Thread.Sleep(500)

+1

Eso es VB.net no VB6 – MarkJ

0

deseo sólo podría añadir el system.dll .net framework o lo que sea a las referencias del proyecto para que sólo se puede 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 es difícil para mí cambiar de IDE muy diferentes.