2017-03-03 655 views
-1

在我的應用程序中,我需要延遲執行一段時間的方法。爲此,我使用了System.Windows.Forms.Timer。如何在c中延遲執行一個函數#

我用下面的代碼來初始化並啓動定時器。

Timer timer = new Timer(); 
timer.Tick += Timer_Tick; 
timer.Interval = 3000; 
timer.Start(); 

在Timer.Tick事件中,我調用了應該延遲的方法,如下所示。

private void Timer_Tick(object sender, EventArgs e) 
    { 
     DoSomethingElse(); 
     timer.Stop(); 
    } 

這個效果很好。

但我不知道它是否是延緩執行的確切方法。

是否有任何其他有效的方式來實現這一目標?

請分享您的建議。提前致謝。

+0

有很多可能的方法來延遲執行某些代碼。哪一個最好取決於你沒有提供的上下文。標記的副本將提供關於阻塞線程(例如,使用Thread.Sleep())和使用某種形式的異步信號/回調(例如,.NET提供的幾個計時器類之一)的比較的一些見解。一個現代的C#方法在重複中沒有被解決,就是使用'async'方法和'await Task.Delay(...)'。 –

+0

另見例如https://stackoverflow.com/questions/4705535/how-to-delay-program-for-a-certain-number-of-milliseconds-or-until-a-key-is-pre和https:// stackoverflow。 com/questions/10963465 /如何在幾秒後調用方法 –

回答

0

嘗試使用Task.Delay。你可以這樣使用它:

Task.Delay(1000).Wait(); 
DoSomething(); 

希望它有幫助!

+0

感謝您的建議。你能解釋爲什麼這個比Timer.Tick好嗎? –

+0

如果你有一段代碼或者你想要連續執行的方法(即每5秒執行一次),我會建議使用Timer。但是,如果你只需要延遲一段時間,我建議你使用Task.Delay。不需要安裝,與Timer不同。 – mindOfAi

+0

我必須在用戶按任意鍵時調用此方法。因此,每當用戶按下某個鍵時,該方法應該在短時間內被調用。 –

0

你可以開始任務和延遲,但是,你正在做的方式,你會得到你的UI線程的回調,所以你可以使用Windows窗體OK互動,如果這是你的延遲函數做什麼。

0

您可以在.NET 4.0中使用Thread.sleep()方法。但是,它會阻止當前線程。

+0

感謝您的建議。我會試試看。 –

+0

使用System.Threading.Timer怎麼樣?你能分享你的想法嗎? –

+0

正如你只想延遲方法調用,你不需要計時器。如果您想按指定的時間間隔執行某項任務,則可以使用計時器。 – Sudharsan