日期:2014-05-20  浏览次数:20820 次

小问题,有过开发经验的都应该可以解决.
private   void   pro(string   url)
                {
                        for   (int   i   =   0;   i   <   1000;   i++)
                        {
                                tsslStatus.Text   =   i.ToString();
                        }
                }

上面的代码很简单,tsslStatus这是一个标签控件
代码实现的功能是随着i的增加,tsslstatus的控件文本内容动态替换,也就是我们会看到tsslstatus的文本内容从1一直变化到999
问题来了,我开发的是窗体程序,执行时总是看不到1到999的变化,看到的永远是只有999
如果说他的运行速度太快的话,我换成5000,也是一样的,总是看不到tsslstatus的文本变化.看到的只有执行完整个循环后的结果

哪个高手帮忙解答一下
我用的是c#
谢谢

------解决方案--------------------
窗体是在循环完之后才Load出来的,当然看不到了,就是写 1000000 你也看不到,只是Load速度慢而已
------解决方案--------------------
用Timer
------解决方案--------------------
如果你要看过过程的话使用线程操作UI界面

private void button3_Click(object sender, EventArgs e)
{
this.label1.Text = "0 ";
Thread thread_2 = new Thread(new ThreadStart(T2));
thread_2.Start();
}


public void T2()
{
try
{
MethodInvoker me = new MethodInvoker(T2_count_add);
for (int i = 0; i < 200; i++)
{
this.BeginInvoke(me);
Thread.Sleep(50);
}
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString(), "错误 ");
}
}

public void T2_count_add()
{
this.label1.Text = (Int16.Parse(this.label1.Text.ToString()) + 1).ToString();
}
------解决方案--------------------
public partial class Form1 : Form
{
private int i = 0;
public Form1()
{
InitializeComponent();
this.timer1.Start();
}
private void timer1_Tick(object sender, EventArgs e)
{
this.label1.Text = i.ToString();
if (++i > = 1000)
this.timer1.Stop();
}
}
拉个timer组件,
------解决方案--------------------
用Timer比较好..
------解决方案--------------------
private void pro(string url)
{
for (int i = 0; i < 1000; i++)
{
tsslStatus.Text = i.ToString();
Thread.Current.Sleep(500);
}
}

------解决方案--------------------
楼上说的都不对,其实你只要写成这样就可以了
private void pro(string url)
{
for (int i = 0; i < 1000; i++)
{
tsslStatus.Text = i.ToString();
Application.DoEvents();
}
}
因为循环中,窗体WM_PAINT消息无法处理,所以要加上DoEvents()
------解决方案--------------------