如何添加2或3秒的延迟

如何在 C # 中为程序添加延迟?

666446 次浏览

你可以使用 Thread.Sleep()函数,例如。

int milliseconds = 2000;
Thread.Sleep(milliseconds);

完全停止执行当前线程2秒。

也许对于 Thread.Sleep来说,最合适的场景是当您想要延迟另一个线程中的操作时,不同于主线程,例如:

 MAIN THREAD        --------------------------------------------------------->
(UI, CONSOLE ETC.)      |                                      |
|                                      |
OTHER THREAD            ----- ADD A DELAY (Thread.Sleep) ------>

对于其他场景(例如,在一段时间后启动操作等) ,请检查 科迪的回答

使用间隔设置为2-3秒的计时器。

根据你正在编写的应用程序的类型,你有三种不同的选择:

  1. System.Timers.Timer
  2. System.Windows.Forms.Timer
  3. System.Threading.Timer

如果您的应用程序需要同时处理该线程上的任何输入(WinForms,WPF) ,则不要使用 Thread.Sleep,因为 Sleep会完全锁定该线程并阻止它处理其他消息。假设一个单线程应用程序(和大多数应用程序一样) ,您的整个应用程序将停止响应,而不是像您可能希望的那样延迟一个操作。请注意,在纯控制台应用中使用 Sleep 可能没有问题,因为没有“事件”需要处理或在单独的线程上(也可以选择使用 Task.Delay)。

除了定时器和 Sleep之外,你还可以使用 Task.Delay,它是 Sleep的异步版本,不会阻止线程处理事件(如果使用得当——不要使用 .Wait()将其变成无限睡眠)。

 public async void ClickHandler(...)
{
// whatever you need to do before delay goes here


await Task.Delay(2000);


// whatever you need to do after delay.
}

如果你使用 C # 7.1(MSDN 博客上的异步主干) ,同样的 await Task.Delay(2000)也可以用在控制台应用的 Main方法中。

注意: 使用 Sleep延迟操作的好处是可以避免由于使用计时器/Delay可能启动多个操作而产生的竞态条件。不幸的是,冻结基于 UI 的应用程序是不可接受的,所以你需要考虑如果你开始多次延迟(例如,如果它是由一个按钮点击触发)会发生什么-考虑禁用这样的按钮,或取消计时器/任务或确保延迟操作可以安全地多次完成。

System.Threading.Thread.Sleep(
(int)System.TimeSpan.FromSeconds(3).TotalMilliseconds);

或与 using声明:

Thread.Sleep((int)TimeSpan.FromSeconds(2).TotalMilliseconds);

我更喜欢这个 1000 * numSeconds(或简单的 3000) ,因为它使之更加明显的人谁没有使用 Thread.Sleep之前。最好能证明你的意图。

在2.3秒内,你应该这样做:

System.Threading.Thread.Sleep(2300);