Wie verzögern ich die Ausführung von Code in Visual Basic (VB6)?
Frage
Ich habe einen lange laufenden Prozess in VB6, die ich vor der Ausführung die nächste Codezeile beenden möge. Wie kann ich das machen? Built-in-Funktion? Kann ich steuern, wie lange zu warten?
Trivial Beispiel:
Call ExternalLongRunningProcess
Call DoOtherStuff
Wie kann ich verzögern 'DoOtherStuff'?
Lösung
VB.Net: Ich möchte einen WaitOne Ereignis handle.
VB 6.0. Ich habe eine DoEvents-Schleife gesehen
Do
If isSomeCheckCondition() Then Exit Do
DoEvents
Loop
Schließlich Sie könnten nur schlafen:
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
Sleep 10000
Andere Tipps
Während Nescio beantworten (DoEvents) funktionieren wird, wird dazu führen, dass Ihre Anwendung zu 100% von einer CPU zu verwenden. Schlaf wird die Benutzeroberfläche nicht mehr reagiert machen. Was Sie brauchen, ist eine Kombination der beiden, und die magische Kombination, die am besten zu funktionieren scheint, ist:
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
While IsStillWaitingForSomething()
DoEvents
DoEvents
Sleep(55)
Wend
Warum zwei DoEvents und ein Schlaf für 55 Millisekunden? Der Schlaf von 55 Millisekunden ist die kleinste Scheibe, die VB6 verarbeiten kann, und zwei DoEvents mit manchmal in Fällen erforderlich, wenn Super-Ansprechbarkeit (nicht durch die API benötigt wird, aber wenn Sie die Anwendung reagiert auf äußere Ereignisse, Sendmessage, Interupts, etc ).
Break Code oben in 2 Prozessen. Führen Sie das erste, dann führen Sie Ihre „lange laufenden Prozess“, dann führen Sie den zweiten Prozess.
Führen Sie Ihren langlaufende Prozess in der Mitte des aktuellen Prozesses und warten, bis es zu vervollständigen.
Ich wünschte, Sie könnten nur die .net Framework system.dll oder was auch immer zu einem Projekt Referenzen hinzufügen, so dass Sie dies nur tun konnte:
Dim ALongTime As Integer = 2000
System.Threading.Thread.Sleep(ALongTime)
... jedes Mal. Ich habe VB6 und VB.net 2008 auf meinem Rechner, und es ist immer schwierig für mich, zwischen den sehr unterschiedlichen IDE zu wechseln.
System.Threading.Thread.Sleep(500)