Come faccio a ritardare l'esecuzione di codice in Visual Basic (VB6)?
Domanda
Ho un lungo processo in esecuzione in VB6 che voglio finire prima di eseguire la successiva riga di codice.Come posso fare?Built-in funzione?È possibile controllare il tempo di attesa?
Banale esempio:
Call ExternalLongRunningProcess
Call DoOtherStuff
Come faccio a ritardare 'DoOtherStuff'?
Soluzione
VB.Net:Vorrei utilizzare un WaitOne handle di evento.
VB 6.0:Ho visto un DoEvents Loop.
Do
If isSomeCheckCondition() Then Exit Do
DoEvents
Loop
Infine, Si può solo dormire:
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
Sleep 10000
Altri suggerimenti
Mentre Nescio s risposta (DoEvents () funziona, causerà l'applicazione per utilizzare il 100% della CPU.Dormire rendere l'interfaccia non risponde.Che cosa avete bisogno è una combinazione dei due, e la magica combinazione che sembra funzionare meglio è:
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
While IsStillWaitingForSomething()
DoEvents
DoEvents
Sleep(55)
Wend
Perché due DoEvents, e il sonno per 55 millisecondi?Il sonno di 55 millisecondi è la più piccola porzione che VB6 in grado di gestire, e l'utilizzo di due DoEvents a volte è richiesta nei casi in cui super-reattività è necessario (non per le API, ma se l'applicazione è di rispondere a eventi esterni, SendMessage, Interupts, ecc).
Come Determinare Quando un Processo shell Ha Terminato:
Se si sta chiamando un processo esterno, quindi si, in effetti, è chiamata in modo asincrono.Riferimento a MS documento di Supporto per le modalità di aspettare fino a quando il processo esterno è completo.
Rompere il codice in 2 processi.Eseguire il primo, quindi eseguire il "lungo processo in esecuzione", quindi eseguire il secondo processo.
Eseguire il lungo processo in esecuzione nel mezzo del vostro processo corrente e attendere il completamento.
Mi auguro che si potrebbe semplicemente aggiungere il .net framework system.dll o qualsiasi cosa per i riferimenti del progetto, in modo che si può fare questo:
Dim ALongTime As Integer = 2000
System.Threading.Thread.Sleep(ALongTime)
...ogni volta.Ho VB6, e VB.net 2008 sulla mia macchina, e la sua sempre difficile per me per passare tra le diverse IDE.
System.Threading.Thread.Sleep(500)