#c# #datagridview #timer
#c# #datagridview #таймер
Вопрос:
Я работаю над проектом на C #, и у меня возникли некоторые проблемы с кодом (ниже). Когда я запускаю проект, событие таймера, похоже, повторяется, оно просто делает то, что обозначено комментариями, я ложусь на спину, затем я встаю, я хочу, чтобы оно повторялось, поэтому я постоянно встаю и ложусь на спину, и да, в datagridview «вкл» у меня есть выбор 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. A
System.Windows.Forms.Timer
будет периодически отмечаться, пока вы его не остановите. Вы действительно установили точку останова (или добавили aDebug.WriteLine
), чтобы подтвердить, что таймер срабатывает или не срабатывает? Или, возможно, таймер периодически срабатывает, но ваш код просто не работает правильно?2. Мой таймер работает только один раз, он не повторяется, как мне бы хотелось. В моем случае то, что я делаю, я ложусь ничком, встаю, но затем он не выполняется повторно.
3. Да, вы уже это говорили и проигнорировали то, что я только что спросил. Вы подтвердили , что функция больше не вызывается? Или вы просто предполагаете , что это не так, потому что конечный результат не соответствует ожиданиям? Снова установите точку останова и / или добавьте отладочную печать.
4. @Wire вы выдаете
break
перед сбросом значения переменной счетчика, следовательно, оно работает только в первый раз.5. Я предполагаю, что он не вызывается снова, потому что конечный результат не соответствует ожидаемому, как вы сказали, таймеры идут до тех пор, пока не будет сказано остановиться, я никогда не говорил ему останавливаться.
Ответ №1:
Таймер не работает, поскольку в коде есть логические проблемы, поскольку таймер никогда не достигнет
if (Countername == 2)
{
Countername = 0;
}
потому что a 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
then не войдет ни в один из блоков оператора switch.
Комментарии:
1. Спасибо за это: D теперь я понимаю
2. @Wire рад помочь : D !