Как и другие люди правильно указали в комментариях, он останавливается на 6
вместо 5
, поскольку 6
- это первое значение, для которого value <= 5
оценивается как ложное (вы используете цикл do-while
,что означает, что условие оценивается после выполнения тела.).Чтобы остановиться на 5
, вы можете либо использовать обычный цикл while
, либо изменить условие на value < 5
или value <= 4
.
Более того, 6 итераций цикла в C # происходят в несколькихмикросекунд.Вы не могли видеть цифры, отображаемые на этикетке, даже если все остальное было сделано правильно, просто потому, что это произошло бы слишком быстро.Чтобы увидеть, что что-то происходит, вам нужно ввести некоторую задержку (Thread.Sleep()
), и в конце каждой итерации вам нужно будет вызвать Application.DoEvents()
чтобы перекрасить форму.
В качестве альтернативы, вы можете использовать галочки Timer
, что было бы предпочтительнее в большинстве случаев.Вы можете сделать это, например, так.
namespace timerbug
{
public partial class Form1 : Form
{
int value;
public Form1()
{
InitializeComponent();
}
private void timer1_Tick(object sender, EventArgs e)
{
if (value < 5)
{
value++;
label1.Text = value.ToString();
}
else
{
timer1.Stop();
}
}
private void button1_Click(object sender, EventArgs e)
{
value = 0;
timer1.Start();
}
}
}