我正在开发一个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;
}
}
}
答案 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语句块。