Ответ 1
Может быть, следующее поможет:
Stopwatch s = new Stopwatch();
s.Start();
while (s.Elapsed < TimeSpan.FromSeconds(600))
{
//
}
s.Stop();
Как я могу выполнить цикл детализации для указанного времени
Timeinsecond = 600
int time = 0;
while (Timeinsecond > time)
{
// do something here
}
Как я могу установить время varaible здесь, если я могу использовать метод запуска и остановки объекта Timer, он не возвращает мне время в секундах
Отношения NewDev
Может быть, следующее поможет:
Stopwatch s = new Stopwatch();
s.Start();
while (s.Elapsed < TimeSpan.FromSeconds(600))
{
//
}
s.Stop();
Если вы хотите простоту использования:
Если у вас нет сильных требований к точности (истинная точность уровня миллисекунды - например, запись видеороликов с высокой частотой кадров в секунду или аналогичная имитация в реальном времени), вы можете просто использовать структуру 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...
}
Создайте функцию для запуска, остановки и истекшего времени следующим образом:
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();
использовать таймеры в С# http://msdn.microsoft.com/en-us/library/system.windows.forms.timer.aspx
Это уродливо.... но вы могли бы попробовать это:
DateTime currentTime = DateTime.Now;
DateTime future = currentTime.AddSeconds(5);
while (future > currentTime)
{
// Do something here ....
currentTime = DateTime.Now;
// future = currentTime.AddSeconds(5);
}
Вместо такой дорогостоящей операции я бы рекомендовал следующее:
using System.Threading;
Thread.Sleep(600000);