2017-03-03 631 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