2008-09-18 5 views
10

J'ai un long processus en cours dans VB6 que je veux terminer avant d'exécuter la prochaine ligne de code. Comment puis je faire ça? Fonction intégrée? Puis-je contrôler combien de temps attendre?Comment différer l'exécution de code dans Visual Basic (VB6)?

exemple Trivial:

Call ExternalLongRunningProcess 
Call DoOtherStuff 

Comment tardes-je 'DoOtherStuff'?

+0

Pouvez-vous donner plus de détails? Est-ce un processus externe et, si oui, comment l'appelez-vous? –

+0

Je pense que vous vous référez à la touche CTRL-P comme c'est offert dans MS Access? –

Répondre

11

VB.Net: j'utiliserais un handle d'événement 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 
+1

DoEvents est ce que vous utiliseriez pour renvoyer le contrôle à l'interface graphique lors de processus longs. –

0

Brisez votre code en 2 processus. Exécutez le premier, puis exécutez votre «processus de longue durée», puis exécutez le deuxième processus.

0

Exécutez votre processus de longue durée au milieu de votre processus en cours et attendez qu'il se termine.

15

Alors que le answer (DoEvents) de Nescio fonctionnera, votre application utilisera 100% d'un processeur. Le sommeil rendra l'interface utilisateur inerte. Qu'est-ce que vous avez besoin est une combinaison des deux, et 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 DoEvents et un sommeil de 55 millisecondes? Le sommeil de 55 millisecondes est la plus petite tranche que VB6 peut gérer, et l'utilisation de deux DoEvents est parfois nécessaire dans les cas où la super-réactivité est nécessaire (pas par l'API, mais si l'application répond aux événements extérieurs, SendMessage, Interupts, etc.).

+0

millisecondes Je pense que vous vouliez dire. –

+0

Absolument, millisecondes ... –

+3

Je vous rejoins pour me rappeler à quel point je ne suis plus obligé de faire VB6 :-) – Matt

-3

System.Threading.Thread.Sleep(500)

+1

Voilà VB.net pas VB6 – MarkJ

0

Je voudrais que vous suffit d'ajouter le cadre de .net system.dll ou quoi que vos références de projet afin que vous puissiez tout faire:

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.