首页 新闻 会员 周边

winform的一个怪问题

0
悬赏园豆:10 [已解决问题] 解决于 2012-08-02 22:44

我定义了一个label和一个进度条pb

逻辑如下

  DataRow[] drs..

  int total = drs.length;

  for(int i = 0; i< drs.total; i++)

  {

    ........

    label.text = i.tostring() + "/" + total.tostring();

    pb.value = i * 100 / total

  }

 

问题来了,进度条是在变化着的,label不变,直到循环完成,才直接显示 22/22   10938/10938等

这个是什么原因呢,显示不同步。

问题补充:

我没起线程

gzl的主页 gzl | 初学一级 | 园豆:5
提问于:2012-07-18 15:11
< >
分享
最佳答案
0

要用后台线程去更新label的值的

收获园豆:4
artwl | 专家六级 |园豆:16736 | 2012-07-18 15:13

我没起线程,都在ui线程里跑的,只是搞不懂原因而已

gzl | 园豆:5 (初学一级) | 2012-07-18 15:33

@gzl: 知道你没起线程啊。你先试验下看看。

BLoodMaster | 园豆:135 (初学一级) | 2012-07-19 21:04
其他回答(6)
0

应该是不是不变。是不是太快。你没有看清楚呢

收获园豆:1
無限遐想 | 园豆:3740 (老鸟四级) | 2012-07-18 16:56
0

感觉,要是不起线程,进度条也变不了哪去吧?起线程。子线程做数据,主线程更新UI。

收获园豆:1
幽灵~ | 园豆:268 (菜鸟二级) | 2012-07-18 17:19
0

有分不?

你用this.invoke。把你那些操作放到这个invoke里面就行了

收获园豆:1
BLoodMaster | 园豆:135 (初学一级) | 2012-07-18 17:37
0

你都循环语句是在后台线程中进行的,需要使用Invode或者BeginInvoke方法主动更新ui线程。

收获园豆:1
飞扬的尘埃 | 园豆:1318 (小虾三级) | 2012-07-18 17:53
0

给进度条加个事件,在事件里改变标签的值。

事件也相当一个线程。

或者用绑定也一样。

收获园豆:1
中文代码 | 园豆:951 (小虾三级) | 2012-07-19 08:26
0

Application.DoEvents();

收获园豆:1
归真 | 园豆:605 (小虾三级) | 2012-07-25 23:13
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册