无法在c#中停止计时器

时间:2013-12-15 21:20:33

标签: c# timer

我希望计时器在ImageNumber等于零时停止。

 private void Health_Regen_Tick(object sender, EventArgs e)
    {
        if (ImageNumber1 == 0)
        {
            Health_Regen.Enabled = false;
        }

        if (ImageNumber1 < 20)
        {
            ImageNumber1 += 1;
            HealthBar.Image = Image.FromFile(path + ImageNumber1.ToString() + ".png");
        }
    }

如果我在第一个if语句后添加一个return语句,则第二个if语句被禁用。

3 个答案:

答案 0 :(得分:3)

  

我希望计时器在ImageNumber等于零时停止。

您似乎已经知道如何执行此操作,假设Health_RegenTimer,那么:

Health_Regen.Enabled = false;

将停用您的Timer

  

如果我在第一个if语句后添加一个return语句,则第二个if语句被禁用。

这是预期的,因为您正在使用return关键字,这将阻止执行相同代码块之后的任何内容。

你的问题并没有完全明确你所要求的问题,但是,我假设你的评论中没有执行第二个if语句,你想要更新HealthBar.Image值,即使Timer } 被禁用?如果是这样,那么下面的内容应该对你有用

private void Health_Regen_Tick(object sender, EventArgs e)
{
    if (ImageNumber1 == 0)
    {
        Health_Regen.Enabled = false;
    }
    else if (ImageNumber1 <= 20)
    {
        ImageNumber1 += 1;
    }
    HealthBar.Image = Image.FromFile(path + ImageNumber1.ToString() + ".png";
}

答案 1 :(得分:0)

您应该只能在计时器实例上调用停止方法。

if (ImageNumber == 0)
{
    Health_Regen.Stop();
}

答案 2 :(得分:0)

这只是猜测!。

替换

if (ImageNumber1 == 0)

if (ImageNumber1 >= 20)

当ImageNumber1等于0时,你的计时器已经停止,但它永远不会倒数到0 此外,如果你将ImageNumber1更改为0.它可能已经在运行计时器,它将增加一个和skip止动器,所以几乎就像你现在基于运气一样编码它的方式。

如果在计时器已经运行时更改ImageNumber1,则会运气。

试试这个:

        if (ImageNumber1 == 0) {
            Health_Regen.Enabled = false;
        } else if (ImageNumber1 < 20) {
            ImageNumber1 += 1;
            HealthBar.Image = Image.FromFile(path + ImageNumber1.ToString() + ".png");
        }

幸运的是,你可以做的最好的事情就是在计时器之外停止计时器ImageNumber1 = 0;

最佳修复: 另外一个更好的解决方案是修复你的程序从ImageNumber1 = 20开始,然后继续下降到0 ..当它命中0时停止计时器......你不应该把它弄得这么混乱你所要做的就是以新的顺序重命名几个png文件!而不是

1.png现在它将是20.png
2.png现在它将是19.png
等等......