如何在C#中为程序添加延迟?
如何在C#中为程序添加延迟?
Answers:
您可以使用Thread.Sleep()功能,例如
int milliseconds = 2000;
Thread.Sleep(milliseconds);
会完全停止当前线程的执行2秒钟。
可能最适合的情况Thread.Sleep是,当您想延迟另一个线程中的操作时,不同于主要线程,例如:
 MAIN THREAD        --------------------------------------------------------->
 (UI, CONSOLE ETC.)      |                                      |
                         |                                      |
 OTHER THREAD            ----- ADD A DELAY (Thread.Sleep) ------>
对于其他情况(例如,一段时间后开始操作等),请查看Cody的答案。
await Task.Delay(milliseconds)。这对我
                    使用间隔设置为2-3秒的计时器。
根据要编写的应用程序类型,您可以选择三个不同的选项:
Thread.Sleep如果您的应用程序需要同时处理该线程上的任何输入(WinForms,WPF),请不要使用,因为这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博客上的Async main),await Task.Delay(2000)则可以在Main控制台应用程序的方法中使用相同的方法。
注意:延迟操作的Sleep好处是避免了由于可能使用timers /启动多个操作而导致的竞争情况Delay。不幸的是,冻结基于UI的应用程序是不可接受的,因此您需要考虑如果启动多个延迟(即,如果它是由单击按钮触发的)会发生什么情况-请考虑禁用此类按钮,或者取消计时器/任务或确保延迟操作可以安全地进行多次。
Thread.Sleep警告可能不那么重要。
                    await Task.Delay()控制台应用程序实际上可能想要使用的版本和内联注释吗Sleep(非异步Main)或Delay(异步Main)
                    在2.3秒内,您应该执行以下操作:
System.Threading.Thread.Sleep(2300);
              System.Threading.Thread.Sleep(
    (int)System.TimeSpan.FromSeconds(3).TotalMilliseconds);
或带有using语句:
Thread.Sleep((int)TimeSpan.FromSeconds(2).TotalMilliseconds);
我更喜欢1000 * numSeconds(或简单地说3000)这是因为它使过去从未使用Thread.Sleep过的人的情况变得更加明显。它可以更好地记录您的意图。
Thread.Sleep(TimeSpan)直接使用,而不必强制转换为int。