Как выполнить цикл для определенного времени

Как я могу выполнить цикл детализации для указанного времени

Timeinsecond = 600

int time = 0;
while (Timeinsecond > time)
{
   // do something here
}

Как я могу установить время varaible здесь, если я могу использовать метод запуска и остановки объекта Timer, он не возвращает мне время в секундах

Отношения NewDev

Ответ 1

Может быть, следующее поможет:

  Stopwatch s = new Stopwatch();
  s.Start();
  while (s.Elapsed < TimeSpan.FromSeconds(600)) 
  {
      //
  }

  s.Stop();

Ответ 2

Если вы хотите простоту использования:

Если у вас нет сильных требований к точности (истинная точность уровня миллисекунды - например, запись видеороликов с высокой частотой кадров в секунду или аналогичная имитация в реальном времени), вы можете просто использовать структуру System.DateTime:

// Could use DateTime.Now, but we don't care about time zones - just elapsed time
// Also, UtcNow has slightly better performance
var startTime = DateTime.UtcNow;

while(DateTime.UtcNow - startTime < TimeSpan.FromMinutes(10))
{
    // Execute your loop here...
}

Измените TimeSpan.FromMinutes на любой период времени, который вам нужен, секунды, минуты и т.д.

Если вы вызываете что-то вроде веб-службы, отображаете что-то пользователю в течение короткого времени или проверяете файлы на диске, я бы использовал это исключительно.

Если вам нужна более высокая точность:

найдите класс Stopwatch и проверьте член Elapsed. Это немного сложнее в использовании, потому что вы должны запустить его, и у него есть некоторые ошибки, которые заставят его иногда идти отрицательно, но это полезно, если вам нужна истинная точность на миллисекундах.

Чтобы использовать его:

var stopwatch = new Stopwatch();
stopwatch.Start();

while(stopwatch.Elapsed < TimeSpan.FromSeconds(5))
{
    // Execute your loop here...
}

Ответ 3

Создайте функцию для запуска, остановки и истекшего времени следующим образом:

Class CustomTimer
{ 
   private DateTime startTime;
    private DateTime stopTime;
    private bool running = false;

    public void Start() 
    {
        this.startTime = DateTime.Now;
        this.running = true;
    }

    public void Stop() 
    {
        this.stopTime = DateTime.Now;
        this.running = false;
    }

    //this will return time elapsed in seconds
    public double GetElapsedTimeSecs() 
    {
        TimeSpan interval;

        if (running) 
            interval = DateTime.Now - startTime;
        else
            interval = stopTime - startTime;

        return interval.TotalSeconds;
    }

}

Теперь в вашем цикле foreach сделайте следующее:

    CustomTimer ct = new CustomTimer();
    ct.Start();
    // put your code here
    ct.Stop();   
  //timeinsecond variable will be set to time seconds for your execution.
  double timeinseconds=ct.GetElapsedTime();

Ответ 5

Это уродливо.... но вы могли бы попробовать это:

DateTime currentTime = DateTime.Now;
DateTime future = currentTime.AddSeconds(5);
while (future > currentTime)
{
    // Do something here ....
    currentTime = DateTime.Now;
  // future = currentTime.AddSeconds(5);
}

Ответ 6

Вместо такой дорогостоящей операции я бы рекомендовал следующее:

using System.Threading;

Thread.Sleep(600000);