2013-03-24 50 views
-6

夥計們有沒有在VB中的任何選項在VB中?c#中的延遲不thread.sleep

Sub Delay(ByVal dblSecs As Double) 

Const OneSec As Double = 1.0#/(1440.0# * 60.0#) 
Dim dblWaitTil As Date 
Now.AddSeconds(OneSec) 
dblWaitTil = Now.AddSeconds(OneSec).AddSeconds(dblSecs) 
Do Until Now > dblWaitTil 
Application.DoEvents() ' Allow windows messages to be processed 
Loop 

End Sub 
+4

這是一個繁忙的等待 - 中絕大多數延遲方式中最差的。 – dasblinkenlight 2013-03-24 11:14:28

+0

它看起來像你在做:'DateTime dblWaitTil = DateTime.Now.AddSeconds(dblSecs); while(DateTime.Now 2013-03-24 11:15:26

+0

*爲什麼*你想延遲?我問,因爲你的答案可能會提供一個更好的解決辦法,而不是簡單地拖延。 – 2013-03-24 11:50:16

回答

0

是的,你可以在C#同樣的事情,但是這是一個非常糟糕的主意。

這種暫停方式稱爲繁忙循環,因爲它會使主線程儘可能多地使用CPU。

你想要做的,而不是什麼是建立一個定時器,由蜱事件調用回調方法:

public void Wait(double seconds, Action action) { 
    Timer timer = new Timer(); 
    timer.Interval = (int)(seconds * 1000.0); 
    timer.Tick += (s, o) => { 
    timer.Enabled = false; 
    timer.Dispose(); 
    action(); 
    }; 
    timer.Enabled = true; 
} 

用例:

textbox.text = "Test"; 
Wait(5.0,() => { 
    textbox.text = "Finish"; 
}); 
+0

我想鏈接這個textbox.text =「測試」;延遲(5秒),然後文本框.text =「Finish」; isa還有其他的好方法嗎? – user1965804 2013-03-24 11:24:12

+0

這是異步的,它不會真的等待,如果你的程序在間隔之前完成,回調代碼永遠不會被調用。 OP想要這樣的行爲 – SergeyS 2013-03-24 11:32:45

+0

@SergeyS:是的,它是異步的,這就是你在事件驅動的環境中如何做這樣的事情。你有什麼建議呢?忙碌循環? – Guffa 2013-03-24 11:44:35

0

你想Timer類或DispatcherTimer類哪個適合您的需求。

+0

你可以舉例,我是新來的C#..( – user1965804 2013-03-24 11:14:08

+0

請參閱附加鏈接,他們有他們的小例子。 – 2013-03-24 11:15:07