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);` }