C# 循环更新GUI
我想先点击按钮在textbox1中打印“ms”值,然后等待100ms(一个接一个),然后显示下一个值 但它仍然在编码C# 循环更新GUI,c#,C#,我想先点击按钮在textbox1中打印“ms”值,然后等待100ms(一个接一个),然后显示下一个值 但它仍然在编码Thread.Sleep(100)之后,通过单击按钮只显示最后一个值。它应该像秒表一样显示值 private void button1_Click(object sender, EventArgs e) { int ms = 00; for (ms = 0; ms < 10; ms++) {
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 = "";
}
}
private void按钮1\u单击(对象发送者,事件参数e)
{
int-ms=00;
对于(ms=0;ms<10;ms++)
{
textBox1.Text=ms.ToString();
睡眠(100);
textBox1.Text=“”;
}
}
这是因为按钮单击在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 = "";
}
}
private void按钮1\u单击(对象发送者,事件参数e)
{
int-ms=00;
对于(ms=0;ms<10;ms++)
{
textBox1.Text=ms.ToString();
textBox1.Update();
睡眠(100);
textBox1.Text=“”;
}
}
但这仍然会阻止您的gui线程。如果不想阻止当前线程,可以创建一个新线程来调用gui线程来更改textBox1.Text
文本框仅显示最后一个值的原因是因为代码在UI线程上运行。在代码结束之前,UI没有时间更新布局。 您可以通过使用某种后台线程机制来解决这个问题,这样UI就有时间和资源进行自我更新
- 您可以使用计时器并更新文本框中的文本
- 您可以使用任务等待来强制执行后台线程,而不是线程。睡眠
private async void button1_Click(Object sender, EventArgs e) { for (int ms = 0; ms < 10; ms++) { textBox1.Text = ms.ToString(); await Task.Delay(100); } }
private async void按钮1\u单击(对象发送方,事件参数e) { 用于(int-ms=0;ms<10;ms++) { textBox1.Text=ms.ToString(); 等待任务。延迟(100); } }