按钮单击事件不更新文本框直到完成

时间:2015-07-07 07:49:25

标签: c# multithreading

这是一个C#代码,当点击qsubmit按钮时,会立即显示“等待......!”。

当我调试程序时,发现当我单击并且函数执行textbox1.text = "Hello";但不更新文本框时,它仅在控件关闭事件函数时更新,当发生这种情况时,textbox的值已经已更改为"wait..!"。我想知道它为什么不立即更新文本框(如果这样做,我会在Thread.Sleep()期间看到文本)

 private void Button_QSubmit_Click(object sender, EventArgs e)
 {
      textBox1.Text = "Hello";
      Thread.Sleep(1000);
      textBox1.Text = "Wait..!";  
 }

2 个答案:

答案 0 :(得分:2)

您正在通过从主线程(UI)调用Thread.Sleep来挂起UI线程,以更新您必须让UI线程在您的函数之外完成其工作的文本框来更新UI ..一直调用{{ 1}}在睡觉之前。 但是调用Application.DoEvents()是一个糟糕的设计

答案 1 :(得分:1)

UI线程负责重绘窗口。因此,当您在UI线程中执行此操作时 long (例如,按钮单击事件),进程正忙于您的代码并且未绘制窗口。

一个简单的解决方案可能是使用Timer。只需添加一个计时器,然后在按钮单击中启动它(例如,您将其设置为在1秒内触发)。

然后,Timer事件将只设置文本。

https://msdn.microsoft.com/en-us/library/system.windows.forms.timer.aspx显示有关Timer类的详细信息。