2008-09-18 9 views
10

Ich habe einen langen laufenden Prozess in VB6, die ich vor dem Ausführen der nächsten Codezeile beenden möchte. Wie kann ich das machen? Eingebaute Funktion? Kann ich kontrollieren, wie lange ich warten soll?Wie verzögere ich die Codeausführung in Visual Basic (VB6)?

triviales Beispiel:

Call ExternalLongRunningProcess 
Call DoOtherStuff 

Wie kann ich 'DoOtherStuff' verzögern?

+0

Können Sie weitere Details angeben? Ist das ein externer Prozess und wenn ja, wie nennst du es? –

+0

Ich denke, Sie beziehen sich auf den Tastenanschlag CTRL-P wie es in MS Access angeboten wird? –

Antwort

11

VB.Net: Ich würde eine WaitOne Event Handle verwenden.

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 
+1

DoEvents ist die Methode, mit der Sie bei lang laufenden Prozessen die Steuerung an die GUI übergeben. –

0

Brechen Sie Ihren Code in 2 Prozesse auf. Führen Sie die erste aus, führen Sie dann Ihren "lang laufenden Prozess" aus und führen Sie dann den zweiten Prozess aus.

0

Führen Sie Ihren lang andauernden Prozess in der Mitte Ihres aktuellen Prozesses aus und warten Sie, bis er abgeschlossen ist.

2

How To Determine When a Shelled Process Has Terminated

Wenn Sie einen externen Prozess sind aufrufen, dann sind Sie in der Tat, es asynchron aufrufen. Informationen dazu, wie Sie warten müssen, bis der externe Prozess abgeschlossen ist, finden Sie im obigen MS Support-Dokument.

15

Während Nescios answer (DoEvents) funktioniert, wird Ihre Anwendung 100% von einer CPU verwenden. Durch den Ruhezustand wird die Benutzeroberfläche nicht mehr reagiert. Was Sie brauchen, eine Kombination aus den beiden ist, 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? Das Sleep von 55 Millisekunden ist das kleinste Segment, das VB6 verarbeiten kann, und die Verwendung von zwei DoEvents ist manchmal erforderlich, wenn Super-Responsiveness benötigt wird (nicht von der API, aber wenn Ihre Anwendung auf externe Ereignisse, SendMessage, Interupts, usw. Reagiert)).

+0

Millisekunden ich denke, du meintest. –

+0

Absolut, Millisekunden ... –

+3

Ich wähle dich für mich, um mich daran zu erinnern, wie glücklich ich nicht mehr sein muss, um VB6 zu tun :-) – Matt

-3

System.Threading.Thread.Sleep(500)

+1

Das ist VB.net nicht VB6 – MarkJ

0

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 nur dies tun könnte:

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 verschiedenen IDEs zu wechseln.