2008-09-18 16 views
10

VB6'da bir sonraki kod satırını çalıştırmadan bitirmek istediğim uzun bir işlem sürem var. Bunu nasıl yapabilirim? Yerleşik işlev Ne kadar bekleyeceğimi kontrol edebilir miyim?Visual Basic'te (VB6) kod yürütmeyi nasıl geciktiririm?

Önemsiz örnek: Ben 'DoOtherStuff' geciktirmek nasıl

Call ExternalLongRunningProcess 
Call DoOtherStuff 

?

+0

Daha fazla ayrıntı verebilir misiniz? Bu bir dış süreç midir, eğer öyleyse, nasıl çağırıyorsunuz? –

+0

Sanırım MS Access'te sunulan CTRL-P tuş vuruşlarına mı atıfta bulunuyorsunuz? –

cevap

11

VB.Net: Bir WaitOne olay tanıtıcısını kullanırdım.

VB 6.0: Bir DoEvents Loop gördüm.

Do 
    If isSomeCheckCondition() Then Exit Do 
    DoEvents 
Loop 

Son olarak, Uyuman sadece olabilir:

Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long) 

Sleep 10000 
+1

DoEvents, uzun süre çalışan işlemler sırasında denetimi GUI'ye döndürmek için kullandığınız şeydir. –

0

Kodunuzu 2 işlemden geçirin. İlkini çalıştırın, sonra "uzun koşu sürecini" çalıştırın, ardından ikinci işlemi çalıştırın.

0

Uzun süren işleminizi mevcut işleminizin ortasında çalıştırın ve tamamlanmasını bekleyin.

15

Nescio'nun answer (DoEvents) çalışması işe yarayacaksa, uygulamanızın bir CPU'nun% 100'ünü kullanmasına neden olacaktır. Uyku, UI yanıt vermiyor. Ne gerek ikisinin kombinasyonu ve en iyi iş gibi görünüyor sihirli kombinasyonudur:

Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long) 

While IsStillWaitingForSomething() 
    DoEvents 
    DoEvents 
    Sleep(55) 
Wend 

Neden iki DoEvents ve 55 milisaniye için bir uyku? 55 milisaniyenin uyku süresi, VB6'nın üstesinden gelebileceği en küçük dilimdir ve iki kez DoEvents kullanımı, süper yanıt vermenin gerekli olduğu durumlarda (API tarafından değil, ancak dış olaylara, SendMessage, Interupts vb.).

+0

milisaniye Sanırım demek istedin. –

+0

Kesinlikle, milisaniye ... –

+3

Beni ne kadar mutlu etmek istediğimi hatırlattığın için bana oy veriyorum VB6 :-) – Matt

-3

System.Threading.Thread.Sleep(500)

+1

Bu VB.net değil VB6 – MarkJ

0

ben sadece bu yapabileceğini böylece sadece proje referanslarına .net framework System.dll ya da her türlü eklemek isterdim:

Dim ALongTime As Integer = 2000 
System.Threading.Thread.Sleep(ALongTime) 

... her seferinde. Makinemde VB6 ve VB.net 2008 var ve farklı IDE'ler arasında geçiş yapmak benim için her zaman zor.