首页 新闻 会员 周边 捐助

线程并行问题

0
悬赏园豆:10 [已解决问题] 解决于 2009-08-18 17:36

我现在想:在填充一个列表的同时,另外跳出一个窗体,该窗体上有一个进度条,显示进度,该进度条的style是Marquee,即滚动的,所以不用设置progressBar的value值

  问题是:当填充列表时,进度条不滚动,只是当填充完毕时,才开始滚动

我猜是不是线程问题,可是一直查不到好的方法改变,请各位帮忙

EEcho的主页 EEcho | 初学一级 | 园豆:3
提问于:2009-08-18 10:01
< >
分享
最佳答案
0

填充列表是主线程无法接受其他事件,导致进度条不动。

可以在填充时不断调用 Application.DoEvent() 来解决。

eaglet | 专家六级 |园豆:17139 | 2009-08-18 10:11
我添加了这句话,但是当我单步执行时,可以滚动,当我按F5直接执行时,却没有滚动,并且我还试了用一个for循环来增加调用Application.DoEvent() 的次数,可结果还是只单步时滚动,按F5不滚动
EEcho | 园豆:3 (初学一级) | 2009-08-18 10:31
写个示例代码贴上来,我看看
eaglet | 园豆:17139 (专家六级) | 2009-08-18 11:16
@eaglet: 这是MMCListView构建函数,其中显示含进度条的窗体,调用完Refresh(),将窗体隐藏 protected override void OnInitialize(AsyncStatus status) { //base.OnInitialize(status); ProgressForm progressForm = new ProgressForm();//含进度条的窗体 progressForm.Show(); this.Columns[0].Title = "FTP描述"; this.Columns[0].SetWidth(100); this.Columns.Add(new MmcListViewColumn("Name1", 50)); this.Columns.Add(new MmcListViewColumn("Name2", 100)); this.Columns.Add(new MmcListViewColumn("Name3", 100)); this.Columns.Add(new MmcListViewColumn("Name4", 50)); this.Columns.Add(new MmcListViewColumn("Name5", 80)); this.Columns.Add(new MmcListViewColumn("Name6", 120)); this.Mode = MmcListViewMode.Report; this.SelectionData.EnabledStandardVerbs = StandardVerbs.Refresh; this.ActionsPaneItems.Add(new Action("刷新", "刷新", -1, "Refresh")); Refresh(); progressForm.Hide(); } 填充MMCListView时,调用此方法 public void Refresh() { // Clear existing information. this.ResultNodes.Clear(); ip = GetIp(); string[][] details = GetInfo(ip);//获得所有信息 if (details != null) { int i = 0; while (i < details.Length && details[i][0] != "")//把信息一个一个添加进去 { ResultNode node = new ResultNode(); node.DisplayName = details[i][0]; node.SubItemDisplayNames.Add(details[i][1]); node.SubItemDisplayNames.Add(details[i][2]); node.SubItemDisplayNames.Add(details[i][3]); node.SubItemDisplayNames.Add(details[i][4]);
EEcho | 园豆:3 (初学一级) | 2009-08-18 15:12
@eaglet:我问题已解决,在另一个问题已经解释清楚了,还是谢谢你
EEcho | 园豆:3 (初学一级) | 2009-08-18 17:35
其他回答(1)
0

主线程太忙了,不能同时处理两个UI上的活,可以考虑多线程同步处理。

James.H.Fu | 园豆:90 (初学一级) | 2009-08-18 13:14
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册