none
如何动态更新label.text啊? RRS feed

  • 问题

  •  foreach (string imgFileSrc in files){
                            count++;
                            imgFile = Image.FromFile(imgFileSrc);
                            int imgH = imgFile.Height;
                            int imgW = imgFile.Width;
                            imgFile = null;
                            aL.Text = count.ToString();// +"/" + fileCount.ToString();
                            progressBar.Value = count;

                        }

     

    aL.Text 是个label ,我想没做一次操作就更新一下计数,结果不能实现,只有循环全完成之后才变样。。。。。但是进度条progressBar却有进度。什么原因?如何解决?

    2012年1月28日 1:26

答案

  • dear

    主执行绪正在忙所以你看不到主执行绪(UI)的更新,你可试试在循环内用下列语法

    Application.DoEvents()
    System.Threading.Thread.Sleep(1);

    要提醒你,太频繁的更新UI会导致CPU到达满載

     


    秘訣無它,唯勤而已 http://www.dotblogs.com.tw/yc421206/
    2012年1月30日 8:29

全部回复

  • 不是没有改变,而是速度太快,以至于你根本来不及看清就出现结果了。

    你尝试这样做:

    foreach (string imgFileSrc in files){
                            count++;
                            imgFile = Image.FromFile(imgFileSrc);
                            int imgH = imgFile.Height;
                            int imgW = imgFile.Width;
                            imgFile = null;
                            aL.Text = count.ToString();	//fileCount.ToString();
                            progressBar.Value = count;
                            Thread.Sleep(10);                   	//延时
                        }

       QQ我:讨论(Talk)
    下载MSDN桌面工具(Vista,Win7)
    我的博客园
    慈善点击,点击此处
    2012年1月28日 2:57
    版主
  • 加上Thread.Sleep()也不管用。。。实际上我这段代码运行完了需要挺长时间的,我要是加上个MessageBox.Show()就能正常变aL.Text了。

    2012年1月28日 12:33
  • 我看了下你的问题,大概你是把代码写到了主线程中,然后主线程不停的在那边运行导致的,出来的Label就是最后一个值。把代码写到线程里面去,然后在调用界面控件的时候加上个invoke就可以了
    帮助大家解决问题咯~~小站:http://www.cnblogs.com/knightluffy/
    2012年1月28日 13:00
  • 加上Thread.Sleep()也不管用。。。实际上我这段代码运行完了需要挺长时间的,我要是加上个MessageBox.Show()就能正常变aL.Text了。

    请点击我的签名处,然后打包你的必要项目内容和出错的代码,我看看。

    信中请详细描述错误情况,谢谢!


       QQ我:讨论(Talk)
    下载MSDN桌面工具(Vista,Win7)
    我的博客园
    慈善点击,点击此处
    2012年1月29日 4:45
    版主
  • dear

    主执行绪正在忙所以你看不到主执行绪(UI)的更新,你可试试在循环内用下列语法

    Application.DoEvents()
    System.Threading.Thread.Sleep(1);

    要提醒你,太频繁的更新UI会导致CPU到达满載

     


    秘訣無它,唯勤而已 http://www.dotblogs.com.tw/yc421206/
    2012年1月30日 8:29
  • 问题有没有解决啊? 分享一下解决方案可以不?

     


    Best Regards,
    Rocky Yue[MSFT]
    MSDN Community Support | Feedback to us
    2012年2月2日 5:30
    版主