如下图,如果我们需要点击开始按钮后,在Textbox里面循环显示1到100万这样的数字,如果直接写将for循环写在button_click里面,点击按钮执行后,程序界面很可能会直接卡死,原因是for循环的执行阻塞了UI的更新。
![](https://img.haomeiwen.com/i15514410/40cd2ab3fa736fdf.jpg)
for(int i=0;i<1000000;i++)
{
Textbox1.Text=i.toString();
Thread.sleep(100);
}
这个时候,我们需要使用委托的方法来进行更新UI;
先定义一个委托
public delegate void UpdateTextBox();
然后创建一个UpdateTextBox类型的函数;
UpdateTextBox updateText;
然后创建一个函数用来更新Textbox1.Text;
public void updateUI()
{
Textbox1.Text=temp;//temp为事先定义的全局变量,类型为string
}
然后定义一个for循环的函数,这个函数会作为新线程在button_click中启动;
public void count()
{
for(int i=0;i<1000000;i++)
{
temp=i.toString();
this.Invoke(updateText);
Thread.Sleep(100);
}
}
button_click里面执行时代码如下:
updateText=new UpdateTextBox(updateUI);
threadA=new Thread(count);
threadA.start();
网友评论