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#
谢谢

解决方案 »

  1.   

    窗体是在循环完之后才Load出来的,当然看不到了,就是写 1000000 你也看不到,只是Load速度慢而已
      

  2.   

    如果你要看过过程的话使用线程操作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();
            }
      

  3.   

    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组件,
      

  4.   

    用timer的话,怎么跟其他程序协调?
    这段代码只是我的程序中的一小部分
      

  5.   

    private void pro(string url)
            {
                for (int i = 0; i < 1000; i++)
                {
                    tsslStatus.Text = i.ToString();
                    Thread.Current.Sleep(500);
                }
            }
      

  6.   

    haidaocht() 
    你的方法我试了一下,还是不行`
    一样是执行完了才出现内容
      

  7.   

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

  8.   


    private void pro(string url)
    {
    for (int i = 0; i < 1000; i++)
    {
    tsslStatus.Text += i.ToString();
    }
    }要 += 啊
    你只是 = 还不永远都只是999!
      

  9.   

    private void pro(string url)
    {
    for (int i = 0; i < 1000; i++)
    {
    tsslStatus.Text += i.ToString();
    }
    }要 += 啊
    你只是 = 还不永远都只是999!
    呵呵
    你没有理解我的意思,我的意思是说从状态标签的内容根据当前程序的处理情况显示出相关信息.当i为1时,该标签显示1,i为2时,标签则显示为二,依次类推
      

  10.   

    macker0030(今天先俯卧,明天再撑)
    你的程序帅~
    问题解决了
    谢谢各位的帮忙再问一下,我的程序在执行的时候就好像挂掉了,等执行完了就会把所有的结果显示出来
    有什么办法改善在执行的时候程序可以处理其他事务的功能呢?
    至少不要像挂掉的一样
      

  11.   

    看来楼主还是没明白我的程序。
    Application.DoEvents();
    这句作用就是释放控制权,让程序可以处理其他事务。
    你在循环里加入这句就行了。