C# c中的计时器有问题#

C# c中的计时器有问题#,c#,timer,C#,Timer,我创建了一个简单的类引擎。以下是构造函数: public Engine() : base() { timer = new System.Timers.Timer(); timer.Elapsed += new System.Timers.ElapsedEventHandler(timer_Elapsed); timer.Interval = 500; timer.AutoReset = true; } void timer_Elapsed(object sen

我创建了一个简单的类引擎。以下是构造函数:

public Engine() : base()
{
    timer = new System.Timers.Timer();
    timer.Elapsed += new System.Timers.ElapsedEventHandler(timer_Elapsed);
    timer.Interval = 500;
    timer.AutoReset = true; 
}

void timer_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
    {
        CurrentTime = CurrentTime.AddMilliseconds(timer.Interval);
    }
有两种方法与类引擎关联:

  public void Play(double speed)
    {
        timer.Interval = speed;
        timer.Start();
    }

  public void Pause() {
        timer.Stop();
        Console.WriteLine(CurrentTime.ToString()); 
    }
这些方法是从另一个类调用的:

  Engine engine = new Engine();
  engine.Play(1000);
  engine.Pause();
调用Pause()方法时出现问题。由于给定的CurrentTime为01/01/0001 00:00:00,因此此调用似乎创建了Engine的新实例。至少,名为Timer的计时器实例没有停止。我不理解那种行为


一个可能的解决方案可能是强制引擎为单例类(它可以工作)。但是,我可能需要创建几个引擎实例。有什么想法吗?谢谢

调用Pause()时,CurrentTime尚未分配给。它仍然是默认值。这是因为在调用Play()之后立即调用Pause()。计时器还没有机会被调用。

这个调用似乎创建了一个新的引擎实例
,我可以保证这不是问题所在。你这里还有别的臭虫。一旦创建了
引擎
,您是否保留了对该引擎的引用?Jean-Marie,您能概括一下您问题的实际答案吗?这可能会帮助其他有类似问题的人。如果你接受一个答案也是有价值的——这让其他人知道这个答案哪个答案对你最有价值。有关更多详细信息,请参阅。在调用Pause()之前,CurrentTime似乎获得了正确的值(例如2011/05/31 12:50:00)。事实上,我可能会在很长一段时间后调用Pause()(这两个方法Play()和Pause()与表单的按钮相关联))@Heandel:谢谢,我将检查代码的其余部分。