Comment retarder L'exécution du code dans Visual Basic (VB6)?
j'ai un long processus en cours dans VB6 que je veux finir avant d'exécuter la prochaine ligne de code. Comment puis-je le faire? Fonction intégrée? Puis-je contrôler combien de temps attendre?
exemple Trivial:
Call ExternalLongRunningProcess
Call DoOtherStuff
comment retarder 'DoOtherStuff'?
7 réponses
VB.Net: je voudrais utiliser un WaitOne poignée d'événement.
VB 6.0: j'ai vu une boucle de 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
alors que Nescio est réponse (DoEvents) va fonctionner, il va provoquer votre application à utiliser 100% d'un CPU. Sommeil va rendre l'INTERFACE ne répond pas. Ce que vous avez besoin est une combinaison des deux, et la combinaison magique qui semble fonctionner le mieux est:
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
While IsStillWaitingForSomething()
DoEvents
DoEvents
Sleep(55)
Wend
pourquoi deux DoEvents, et un sommeil de 55 millisecondes? Le sommeil de 55 millisecondes est la plus petite tranche que VB6 peut supporter, et l'utilisation de deux DoEvents est parfois nécessaire dans les cas où super-réactivité est nécessaire (pas par L'API, mais si votre application répond à des événements extérieurs, SendMessage, Interupts, etc.).
Comment déterminer si un procédé à L'écaille S'est terminé
si vous appelez un processus externe, alors vous l'appelez de façon asynchrone. Reportez-vous au document de Soutien MS ci-dessus pour savoir comment attendre que votre processus externe soit terminé.
divisez votre code en 2 Processus. Lancez le premier, puis lancez votre "long processus en cours", puis lancez le deuxième processus.
exécutez votre processus à long terme au milieu de votre processus actuel et attendez qu'il soit terminé.
je souhaite que vous pourriez il suffit d'ajouter le .net framework système.dll ou n'importe quoi à vos références de projet pour que vous puissiez juste faire ceci:
Dim ALongTime As Integer = 2000
System.Threading.Thread.Sleep(ALongTime)
...chaque fois. J'ai VB6, et VB.net 2008 sur ma machine, et c'est toujours difficile pour moi de basculer entre les IDE très différents.