A C# Таймер имеет возможность вызвать функцию обратного вызова по истечении заданного времени прошло, и, таким образом, проходит проверку в отдельном потоке.
Если вам не все равно, сколько времени прошло, и вы не хотите использовать возможности Unity Time.deltaTime, вы можете использовать DateTime для отслеживания времени. Вот базовый примерный класс, который обеспечивает такое поведение.
public class SimpleTimer
{
private DateTime StartTime;
private DateTime LastTime;
private bool running;
public double ElaspedTime { get { return GetElapsedTime(); } }
public void Start()
{
StartTime = DateTime.Now;
running = true;
}
public void Restart()
{
Start();
}
public double GetElapsedTime()
{
if (!running)
throw new Exception("SimpleTimer not running! Must call Start() prior to querying the Elapsed Time.");
LastTime = DateTime.Now;
var elaspedTime = LastTime - StartTime;
return elaspedTime.TotalMilliseconds;
}
public double GetElapsedTimeAndRestart()
{
var elaspedTime = GetElapsedTime();
Restart();
return elaspedTime;
}
}
... и вот пример использования:
var timer = new SimpleTimer();
timer.Start();
//Prints the total time each iteration
for(var i = 1; i <=1000; i++)
{
System.Threading.Thread.Sleep(5);
Console.WriteLine("Loop " + i + ": Elasped Time = " + timer.ElaspedTime + " ms");
}
timer.Restart();
//Prints roughly 5ms each iteration
for (var i = 1; i <= 1000; i++)
{
System.Threading.Thread.Sleep(5);
Console.WriteLine("Loop " + i + ": Elasped Time = " + timer.ElaspedTime + " ms");
timer.Restart();
}
Это может быть расширена, чтобы вызвать функцию после того, как желаемое истекшее время было достигнуто, но вам нужно будет поместить вызов к методу проверки какое-то место в вашем коде, которое запускается часто и последовательно. (Как в петле FSM)
Надеюсь, это поможет!
если есть еще один «Таймер»? – tchelidze
Да, это возможно. Просто используйте 'System.Windows.Forms.Timer';) –
Можно ли рассказать нам о причине и цели этого вопроса? – TaW