CSharp - 在不使用 System.Timers.Timer 或者 System.Threading.Timer的C# 中,先创建一个计时器

  显示原文与译文双语对照的内容

是否可以在不使用 System.Timers.Timer 或者 System.Threading.Timer的情况下在 C# 中创建计时器?

我在一个统一项目( C# ) 中使用定时器,我正在尝试导出一个项目。 而在统一的输出中,线程不受支持。

而且,使用 System.Timers.Timer> Elapsed 事件在单独的线程上运行。 ()?

时间: 原作者:

当指定时间过了,C# 计时器就能够触发回调函数,从而在单独的线程中运行检查。

如果你只关心所使用的时间,并且不想使用统一功能,可以使用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();


}



一旦达到所需的运行时间,这可以扩展到一个函数,但是你需要在代码中调用一个 that 。 ( 如在FSM循环中)

希望有帮助!

我想你可以做一些类似的事情:


public class MyTimer : MonoBehaviour


{


float myTime = 0.0f;


void Update()


{


UpdateTime();


}



public void UpdateTime()


{


myTime += Time.deltaTime;


}



}



...