C#通过委托实现实时更新界面避免程序卡死

如下图,如果我们需要点击开始按钮后,在Textbox里面循环显示1到100万这样的数字,如果直接写将for循环写在button_click里面,点击按钮执行后,程序界面很可能会直接卡死,原因是for循环的执行阻塞了UI的更新。


界面1.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();

你可能感兴趣的:(C#通过委托实现实时更新界面避免程序卡死)