Comment retarder l'exécution du code dans Visual Basic (VB6)?
Question
J'ai un long processus dans VB6 que je veux terminer avant d'exécuter la ligne de code suivante. Comment puis je faire ça? Fonction intégrée? Puis-je contrôler le temps d'attente?
Exemple trivial:
Call ExternalLongRunningProcess
Call DoOtherStuff
Comment puis-je retarder 'DoOtherStuff'?
La solution
VB.Net: Je voudrais utiliser un WaitOne .
VB 6.0: j'ai vu une boucle DoEvents.
Do
If isSomeCheckCondition() Then Exit Do
DoEvents
Loop
Enfin, vous pouvez simplement dormir:
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
Sleep 10000
Autres conseils
Alors que la réponse de Nescio est (DoEvents) fonctionnera, votre application utilisera 100% d’un processeur. Le sommeil empêchera l'interface utilisateur. Ce qu'il vous faut, c'est une combinaison des deux. La combinaison magique qui semble fonctionner le mieux est la suivante:
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
While IsStillWaitingForSomething()
DoEvents
DoEvents
Sleep(55)
Wend
Pourquoi deux événements et un sommeil pour 55 millisecondes? La veille de 55 millisecondes est la plus petite tranche prise en charge par VB6. Il est parfois nécessaire d'utiliser DoEvents dans les cas où la réactivité est nécessaire (pas par l'API, mais si votre application répond à des événements externes, SendMessage, Interupts, etc. ).
Scindez votre code en deux processus. Exécutez le premier, puis votre "long processus", puis exécutez le deuxième processus.
Exécutez votre processus de longue durée au milieu de votre processus actuel et attendez qu'il se termine.
Je souhaite que vous puissiez simplement ajouter le fichier .net framework system.dll ou toute autre référence à vos références de projet afin de pouvoir le faire:
Dim ALongTime As Integer = 2000
System.Threading.Thread.Sleep(ALongTime)
... à chaque fois. J'ai VB6 et VB.net 2008 sur ma machine et il m'est toujours difficile de basculer entre les très différents IDE.
System.Threading.Thread.Sleep (500)