c#等待一段时间而不阻塞

我希望我的方法等待大约500毫秒,然后检查是否有一些标志已经改变。 如何在不阻止我的其他应用程序的情况下完成此操作?

Thread.Sleep(500)将强制当前线程等待500ms。 它可以工作,但如果您的整个应用程序在一个线程上运行,那么它不是您想要的。

在这种情况下,你会想要使用一个Timer,如下所示:

using System.Timers; void Main() { Timer t = new Timer(); t.Interval = 500; //In milliseconds here t.AutoReset = true; //Stops it from repeating t.Elapsed += new ElapsedEventHandler(TimerElapsed); t.Start(); } void TimerElapsed(object sender, ElapsedEventArgs e) { Console.WriteLine("Hello, world!"); } 

如果您希望计时器重复,您还可以将AutoReset设置为false(或根本不设置)。

我真的不明白这个问题。

如果要在检查前阻止,请使用Thread.Sleep(500);

如果要每x秒异步检查一次,可以使用Timer每隔x毫秒执行一次处理程序。

这不会阻止您当前的线程。

有问题的方法是在与应用程序其余部分不同的线程上执行,然后执行以下操作:

 Thread.Sleep(500); 

你可以使用await Task.Delay(500); 不像Sleep那样阻塞线程,并且使用比Timer更少的代码。

 System.Threading.Thread.Sleep(500); 

更新

这不会阻止应用程序的其余部分,只是运行方法的线程。

使用计时器应该可以解决问题

如果你需要使用一个线程,那么这里是一个例子

 void Main() { System.Threading.Thread check= new System.Threading.Thread(CheckMethod); check.Start(); } private void CheckMethod() { //Code Thread.Sleep(500); } 

异步任务:

  var task = new Task (() => function_test()); task.Start(); public void function_test() { `Wait for 5000 miliseconds` Task.Delay(5000);` }