我想首先点击按钮在textbox1中打印“ms”值,然后它应该等待100ms(逐个),然后显示下一个值。
但是,在编码Thread.Sleep(100)
之后,它仍然只显示按钮的最后一个值。它应该显示像秒表一样的价值。
private void button1_Click(object sender, EventArgs e)
{
int ms = 00;
for (ms = 0; ms < 10; ms++)
{
textBox1.Text = ms.ToString();
Thread.Sleep(100);
textBox1.Text = "";
}
}
答案 0 :(得分:0)
多数民众赞成,因为你的按钮点击正在gui线程上运行,并会阻止绘画。
您可以尝试更新文本框:
private void button1_Click(object sender, EventArgs e)
{
int ms = 00;
for (ms = 0; ms < 10; ms++)
{
textBox1.Text = ms.ToString();
textBox1.Update();
Thread.Sleep(100);
textBox1.Text = "";
}
}
但是这仍然会阻止你的gui线程。如果你不想阻止当前线程,你可以创建一个新的线程来调用gui线程来改变textBox1.Text。
答案 1 :(得分:0)
您的文本框仅显示最后一个值的原因是您的代码在UI线程上运行。在您的代码到达结束之前,UI没有时间更新其布局。 您可以通过使用某种背景线程机制来解决这个问题,以便UI有时间和资源来更新自己。
您可以使用任务等待强制执行背景线程而不是Thread.Sleep
private async void button1_Click(Object sender, EventArgs e)
{
for (int ms = 0; ms < 10; ms++)
{
textBox1.Text = ms.ToString();
await Task.Delay(100);
}
}