none
c#中状态栏(statusStrip)不能及时更新的问题 RRS feed

  • 问题

  • 窗口中有一个按钮,两个状态栏(一个是文字,一个是进度条)。
    按钮过程中,文字 "进度开始"不显示,只是在进度结束后,显示"进度结束"! 有什么办法能在进度开始时,文字栏中显示"进度开始" ,进度结束后显示"进度结束"呢? 代码如下:

            private void button1_Click(object sender, EventArgs e)
            {
                this.toolStripStatusLabel1.Text = "进度开始";
                this.toolStripProgressBar1.Maximum = 100000;
                for (int i = 0; i < 100000; i++)
                    this.toolStripProgressBar1.Value = i;

                this.toolStripStatusLabel1.Text = "进度结束";
            }
    2012年3月20日 17:02

答案

  • 最简单的办法是在

    this.toolStripStatusLabel1.Text = "进度开始";

    后面加上

    Application.DoEvents();
    • 已编辑 EFanZh 2012年3月20日 17:46
    • 已标记为答案 hot871 2012年3月21日 14:47
    2012年3月20日 17:43

全部回复

  • 最简单的办法是在

    this.toolStripStatusLabel1.Text = "进度开始";

    后面加上

    Application.DoEvents();
    • 已编辑 EFanZh 2012年3月20日 17:46
    • 已标记为答案 hot871 2012年3月21日 14:47
    2012年3月20日 17:43
  • dear

    因为循环跑太快了,UI来不急更新画面,UI线程忙着处理循环内的事,虽然可以使用DoEvents让UI更新,但这并不是正确的方式,若你的专案里有多个大量工作要执行,再强大的硬件,资源也会被耗尽

    http://www.dotblogs.com.tw/yc421206/archive/2008/10/28/5795.aspx

    循环内饰属于大量的工作,又必须更新UI线程,这时你应该学会用多线程,由其他线程去更新UI线程,UI更新的速度越快表示用掉的资源越多

    http://www.dotblogs.com.tw/yc421206/archive/2009/02/13/7141.aspx

    http://www.dotblogs.com.tw/yc421206/archive/2009/02/15/7174.aspx


    秘訣無它,唯勤而已 http://www.dotblogs.com.tw/yc421206/

    2012年3月21日 3:58