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'?

Était-ce utile?

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. ).

Comment déterminer à quel moment un processus écossé est terminé:

Si vous appelez un processus externe, vous l’appelez en fait de manière asynchrone. Reportez-vous au document de support technique ci-dessus pour savoir comment attendre la fin du processus externe.

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)

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top