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

War es hilfreich?

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

Wie bestimmen, wann Shell-Prozess beendet:

Wenn Sie einen externen Prozess sind aufrufen dann Sie werden in der Tat, nannte es asynchron. Wenden Sie sich an das oben MS Support-Dokument, wie zu warten, bis die externe Prozess abgeschlossen ist.

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)

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top