Implementing a loop using a timer in C#

后端 未结 4 1106
终归单人心
终归单人心 2021-01-11 22:23

I wanted to replace a counter based while loop with the timer based while loop in C#.

Example :

while(count < 100000)
{
   //do something 
}


        
相关标签:
4条回答
  • 2021-01-11 23:22

    You might as well use the DateTime.Now.Ticks counter:

    long start = DateTime.Now.Ticks;
    TimeSpan duration = TimeSpan.FromMilliseconds(1000);
    do
    {
      //
    }
    while (DateTime.Now.Ticks - start < duration);
    

    However, this seems to be something like busy waiting. That means that the loop will cause one core of your CPU to run at 100%. It will slow down other processes, speed up fans a.s.o. Although it depends on what you intend to do I would recommend to include Thread.Sleep(1) in the loop.

    0 讨论(0)
  • 2021-01-11 23:25

    What about using the Stopwatch class.

    using System.Diagnostics;
    //...
    Stopwatch timer = new Stopwatch();
    timer.Start();
    while(timer.Elapsed.TotalSeconds < Xseconds)
    {
        // do something
    }
    timer.Stop();
    
    0 讨论(0)
  • 2021-01-11 23:27

    Use a construct like this:

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

    Be careful though to do this on the UI thread, as it will block input.

    0 讨论(0)
  • 2021-01-11 23:29

    You can use Stopwatch class instead of them, like;

    Provides a set of methods and properties that you can use to accurately measure elapsed time.

    Stopwatch sw = new Stopwatch();
    sw.Start();
    
    while (sw.Elapsed < TimeSpan.FromSeconds(X seconds)) 
    {
       //do something
    }
    

    From TimeSpan.FromSecond

    Returns a TimeSpan that represents a specified number of seconds, where the specification is accurate to the nearest millisecond.

    0 讨论(0)
提交回复
热议问题