在C#中使用计时器实现循环

Rau*_*ulp 5 c# loops timer countdowntimer

我想在C#中使用基于定时器的while循环替换基于while循环的计数器.

示例:

while(count < 100000)
{
   //do something 
}
Run Code Online (Sandbox Code Playgroud)

while(timer < X seconds)
{
    //do something 
}
Run Code Online (Sandbox Code Playgroud)

我有两种类型的C#.NET定时器本的System.TimersThreading.Timers.哪一个会更好用,怎么样.我不想在计时器上增加额外的时间消耗或线程问题.

Cas*_*rah 20

怎么样使用秒表类.

using System.Diagnostics;
//...
Stopwatch timer = new Stopwatch();
timer.Start();
while(timer.Elapsed.TotalSeconds < Xseconds)
{
    // do something
}
timer.Stop();
Run Code Online (Sandbox Code Playgroud)


Bar*_*chs 7

使用这样的结构:

Timer r = new System.Timers.Timer(timeout_in_ms);
r.Elapsed += new ElapsedEventHandler(timer_Elapsed);
r.Enabled = true;
running = true;
while (running) {
   // do stuff
}
r.Enabled = false;

void timer_Elapsed(object sender, ElapsedEventArgs e)
{
   running = false;
}
Run Code Online (Sandbox Code Playgroud)

但是要注意在UI线程上执行此操作,因为它会阻止输入.


Son*_*nül 6

您可以使用Stopwatch类而不是它们,例如;

提供一组方法和属性,可用于准确测量经过的时间.

Stopwatch sw = new Stopwatch();
sw.Start();

while (sw.Elapsed < TimeSpan.FromSeconds(X seconds)) 
{
   //do something
}
Run Code Online (Sandbox Code Playgroud)

TimeSpan.FromSecond

返回表示指定秒数的TimeSpan,其中规范精确到最接近的毫秒.