【问题标题】:Winform application Timer doesn´t work correctlyWinform 应用程序计时器无法正常工作
【发布时间】:2016-04-15 05:43:14
【问题描述】:

我正在做一个 winform 应用程序,但计时器无法正常工作。第一次有效,然后,它没有。 代码如下:

public void GetNewTurn(Turn turn)
{
    _tmrStarTime = DateTime.Now;
    timer1.Start();
    timer1.Tick += tmr1_Tick;
}

private void tmr1_Tick(object sender, EventArgs e)
{
    //timer code here
    timer.stop();
}

所以,这个想法是: GetNewTurn 是一个从另一个地方调用的函数。我第一次调用它,工作正常,然后没有。我在 tmr1_Tick 中放了一个断点,我可以看到它第一次就可以工作,然后就不行了。 在 Timer 属性中,我设置 Enable = True。 我做错了什么? 谢谢!

【问题讨论】:

  • 看来您在第一次滴答之后停止计时器......所以我希望它只运行一次。
  • 嗯..你正在阻止它。那么为什么停止后它会继续运行呢?如果您希望它继续运行,请删除您的 timer.stop();
  • 从我上面看到的代码中,我建议你使用一个可以独立触发和独立停止的进程,并且每次调用GetNewTurn方法时都可以创建多个进程
  • @Icemanind 我在 2 秒后停止它,然后,当再次调用 GetNewTurn 函数时,它应该再次启动..

标签: c# winforms timer


【解决方案1】:

你不应该在第一个滴答声中停止 tmr1_Tick

public void GetNewTurn(Turn turn)
{
    _tmrStarTime = DateTime.Now;
    timer1.Start();
    timer1.Tick += tmr1_Tick;
}

private void tmr1_Tick(object sender, EventArgs e)
{
    //the code for each tick 
}

【讨论】:

  • 我没有,我在 2 秒后停止它(我没有写所有代码..)
【解决方案2】:

仅在构造函数或 OnLoad 覆盖中添加一次处理程序。

timer1.Tick += tmr1_Tick;

public void GetNewTurn(Turn turn)
{
  _tmrStarTime = DateTime.Now;
  timer1.Start();
}

【讨论】:

  • 很好,正确的做事方式,但这并不能解决他的问题。
  • @Verdolino 我猜是这样,因为他可能对 Tick 方法进行了多次调用。问题不是停止计时器,而是OP在“此处的计时器代码”部分中所做的任何事情。我的猜测。
  • 如果我将处理程序放在构造函数中,当我打开表单时,它会自动启动计时器......我不想要它。
  • @MatiSilver 然后确保设计器禁用了计时器。
猜你喜欢
  • 1970-01-01
  • 2011-10-20
  • 1970-01-01
  • 2012-01-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多