2011-05-08 53 views
2

我想創建一個小延遲,以便我的第一組代碼平穩運行。如何在vb.net中做一個小小的延遲?

如何在vb.net中做到這一點?

編輯1

假設我有這樣的代碼

..................Statement Line 1.............. 
..................Statement Line 2.............. 
..................Statement Line 3.............. 
..................Statement Line 1.............. 
..................Statement Line 5.............. 

WAIT UNTIL STATEMENT 5 IS COMPLETED 

..................Statement Line 6.............. 
..................Statement Line 7.............. 
..................Statement Line 8.............. 
..................Statement Line 9.............. 
..................Statement Line 10............. 

幾行僅在第一個五年語句的執行完成那麼只有在未來五年可以執行

+0

你能澄清?你想在哪裏延遲執行,以及何時?你的「第一套代碼」是什麼? – magma 2011-05-08 17:39:43

+0

你爲什麼要這樣做? :) – 2011-05-08 17:44:15

+0

請參閱我的編輯 – 2011-05-08 17:44:45

回答

3

您是否想讓線程睡眠?

Thread.Sleep(100);

其中100是您希望線程休眠的毫秒數。

此外,請確保有Imports System.Threading,我假設你有,如果你已經有多個線程。

編輯:好的,所以你已經添加了一些代碼。不過,這應該歸結爲是否有多個線程在運行,並且從您的問題看,它看起來像是在一個線程中。在這種情況下,語句5將始終在語句6運行之前完成。這就是代碼的工作原理。唯一的情況是,如果其中一條語句1-5在新線程上產生了某些內容,那麼情況就不會如此。

+0

請參閱我的編輯 – 2011-05-08 17:45:48

+0

而不是導入我會建議只是鍵入Threading.Thread.Sleep(100) – Gent 2011-05-08 17:47:48

+0

@Gent是的,在這種情況下可能會更好。我通常使用一些線程編碼,所以我習慣了線程已經被導入 – cost 2011-05-08 17:53:42

4

首先給出您提供的代碼示例第6行將不會執行,直到第5行完成。你不需要做任何事情;除非第5行正在踢外部應用程序或創建新線程。

除此之外 -

Thread.Sleep將引入的延遲,但更多的往往不是它真的不是你在找什麼。

如果使用了Thread.Sleep執行的線程會睡眠不過多久,你告訴它。但是您的示例代碼表明您希望線程等待UNTIL滿足一些條件。假設你在發生這種情況你睡覺的線程之外的條件等,在最好的,你會結束了一個循環,一直睡了X毫秒,然後檢查的條件。

但是也有一些容易(從長遠來看)其他的方法/比這更強勁。如果你真的想在另一個線程上發生某些事情,並在完成時收到警報,考慮BackgroundWorker類。

http://msdn.microsoft.com/en-us/library/system.componentmodel.backgroundworker.aspx

它是簡單的多線程任務非常方便。您創建一個BackgroundWorker和處理它的「DoWork的」事件與邏輯發生在新的線程和處理「已完成」事件(檢查是否有正確的名稱的文檔,我從內存中去)。你調用'RunWorkerAsynch'來啓動這個過程,當'Worker_Completed'事件觸發時,你可以繼續執行第6行。

我希望這是有道理的/幫助。

+0

我知道後臺進程,但我希望它儘可能簡單。 – 2011-05-08 18:30:58

1

我覺得

Application.DoEvents() 

應該這樣做。

+0

請不要在沒有認真考慮的情況下這樣做。 Application.DoEvents()將允許UI代碼運行,其中可能包含一個觸發與您已經運行的代碼完全相同的點擊事件。 – Jonathan 2015-08-11 12:55:16

0

使用的BackgroundWorker對象屬性「IsBusy」,並且不允許直到工作進程正忙於執行第6。

瞭解更多關於BackgroundWorker的here

相關問題