在.net桌面程序关于UI及时响应的问题

来源:百度知道 编辑:UC知道 时间:2024/05/06 03:57:43
比如我要计算1+2+3+……100,在用户界面上实时显示目前计算结果
private void Form1_Load(object sender, EventArgs e)
{
……
int sum=0;
for(int i=1;i<=100;i++)
{
sum+=i;
label1.text=sum;
}
……
}
但实际上运行以后用户界面会失去响应一段时间,然后直接显示5050.若要让它实时显示计算结果,是不是要用多线程?请高手把修改后的代码贴上来,谢谢!
sololive有点回答到点子上了,可是机子上实验了下,发现没反应啊,麻烦你再修改下。。。

当然需要多线程例子如下:
private volatile int currentNumber = 0;
private void Form1_Load(object sender, EventArgs e)
{
//Form加载的时候启动一个手工线程.
System.Threading.Thread thread = new System.Threading.Thread(new System.Threading.ThreadStart(NumberIncrement));
thread.Start();
}
//递增数字.
private void NumberIncrement()
{
for (int i = 0; i < 100; i++)
{
currentNumber += i;
//注意,当前方法由手工线程执行,无法直接对UI线程下的控件赋值.我们启用一个委托,跳回UI线程.
EventHandler eh = new EventHandler(DisplayNumber);
this.Invoke(eh, new object[] { null, null });
//为了看到效果,这里可以加上
//Thread.Sleep(30);
}
}
private void DisplayNumber(object sender, EventArgs e)
{
//这里给UI控件赋值.
//比如 txtNumber.Text = currentNum