重新启动计时器

时间:2014-06-19 00:56:07

标签: c# datagridview timer

我正在开发一个C#项目,我遇到了一些代码问题(如下)。当我运行项目时,Timer Tick事件似乎重复了,它只是做了注释所表示的内容,我倾向于,然后我站起来,我希望它重复自己,所以我不断站起来,去俯卧撑,是的,在datagridview“on”选择中我有timer1.Start();

private void timer1_Tick(object sender, EventArgs e)
{
    {
        Countername++;
        switch (Countername)
        {
            case 1:
            {
                PS3.SetMemory((0x01786718 + (uint)dataGridView1.CurrentRow.Index * 0x5808), new byte[] { 0x01 });//Go Prone
                break;
            }

            case 2:
            {
                PS3.SetMemory((0x01786718 + (uint)dataGridView1.CurrentRow.Index * 0x5808), new byte[] { 0x00 }); // Stand Up
                break;
            }

            if (Countername == 2)
                Countername = 0;
        }
    }
}

1 个答案:

答案 0 :(得分:1)

计时器无法运行,因为代码中存在逻辑问题,因为计时器永远不会到达

if (Countername == 2)
{
    Countername = 0;
}

因为在将值重置为零之前应用了break

编写代码的更好方法是

private void timer1_Tick(object sender, EventArgs e)
{
    Countername++;
    switch (Countername)
    {
        case 1:
            PS3.SetMemory((0x01786718 + (uint)dataGridView1.CurrentRow.Index * 0x5808), new byte[] { 0x01 });//Go Prone
            break;

        case 2:
            PS3.SetMemory((0x01786718 + (uint)dataGridView1.CurrentRow.Index * 0x5808), new byte[] { 0x00 });//Stand Up
            if (Countername == 2)
                Countername = 0;

            break;
    }
}

还有一件事要注意:

如果由于某种原因Countername > 2的值,则它不会进入任何switch语句块。