无法创建在C#中运行函数的计时器

时间:2014-03-25 18:16:15

标签: c# visual-studio-2008 xna

这一次,我来找你们寻求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,但我什么都没得到,我无法通过这种方式传递论据。有什么想法吗?

谢谢!

2 个答案:

答案 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或锁定你的资源。