这一次,我来找你们寻求Timers的帮助(System.Timers具体,我相信)
我需要制作一个每秒运行一次功能的计时器,到目前为止这就是我所拥有的:
public class Game1 : Microsoft.Xna.Framework.Game
{
Timer CooldownTracker;
protected override void LoadContent()
{
CooldownTracker = new Timer();
CooldownTracker.Interval = 1000;
CooldownTracker.Start();
}
private void DecreaseCooldown(List<Brick> bricks)
{
foreach (Brick brick in bricks)
{
if (brick.Cooldown == 0)
brick.Cooldown = 2;
else
brick.Cooldown--;
}
}
}
...如何让计时器运行DecreasedCooldown(List bricks)功能?我已经试过Timer.Elapsed,但我什么都没得到,我无法通过这种方式传递论据。有什么想法吗?
谢谢!
答案 0 :(得分:2)
您需要附上Timer Elapsed event之类的内容:
CooldownTracker = new Timer();
CooldownTracker.Elapsed += CooldownTracker_Elapsed; //HERE
CooldownTracker.Interval = 1000;
CooldownTracker.Start();
然后是事件:
void CooldownTracker_Elapsed(object sender, ElapsedEventArgs e)
{
DecreaseCooldown(yourList);
}
答案 1 :(得分:0)
如果需要,您可以使用Thread。它不是那么准确可能是ThreadPool的原因,但可以提供帮助。 喜欢
private bool run = true;
Thread timer = new Thread(Run);
timer.Start();
并定义Run
private void Run()
{
while(run)
{
// Call function
Thread.Sleep(1000); //Time in millis
}
}
如果你遇到跨线程异常,请尝试使用for循环而不是foreach或锁定你的资源。