为什么prograssbar没有及时更新?

diandian82 2013-11-13 09:54:54
代码如下,现象是listview可以一条一条加进去,这个正常,但为什么prograssbar是静止不动的,没有逐步增长,但等线程结束后,prograssbar会一下子完成从0到100的加载,这个是怎么回事?怎么解决?谢谢。


private void btnDownload_Click(object sender, EventArgs e)
{
if (string.IsNullOrWhiteSpace(tbInputs.Text))
{
MessageBox.Show("请输入要下载的产品信息,包括产品编号和下载地址,多个产品请用换行分开");
return;
}
btnDownload.Enabled = false;
ThreadStart ts = new ThreadStart(StartDownload);
workerThread = new Thread(ts);
workerThread.Start();
}

private void StartDownload() {
string[] products = tbInputs.Text.Split('\n');
int i = 0;
foreach (var product in products)
{
i++;
var productInfo = product.Split(',');
string productCode = productInfo[0].Trim();
string downloadURL = productInfo[1].Trim();
if (string.IsNullOrEmpty(productCode) || string.IsNullOrEmpty(downloadURL))
{
AddDownloadResult(productCode, downloadURL, 0, i, products.Length, true);
continue;
}

var pro = TmallProductFactory.GetProduct(productCode, downloadURL);
if (pro != null)
{
int cnt = pro.DownloadPictures();
AddDownloadResult(productCode, downloadURL,cnt, i, products.Length);
}
}

}

private void AddDownloadResult(string code, string url, int cnt, int index, int total, bool isErrorItem=false)
{
ListViewItem li = new ListViewItem();
if (isErrorItem)
li.ForeColor = Color.Red;
li.SubItems[0].Text = code;
li.SubItems.Add(url);
li.SubItems.Add(cnt.ToString());
string path = System.Configuration.ConfigurationManager.AppSettings["PictureSavedRootPath"]+code;
li.SubItems.Add(path);

this.Invoke(new Action(delegate()
{
this.listView1.Items.Add(li);
progressBar1.Value = Convert.ToInt32((index / total) * 100);
}));
}
...全文
220 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
diandian82 2013-11-14
  • 打赏
  • 举报
回复
谢谢啦大家啦
diandian82 2013-11-14
  • 打赏
  • 举报
回复
原来犯了这么低级的错误。
  • 打赏
  • 举报
回复
可以这样写 progressBar1.Value = Convert.ToInt32(((0.0 + index) / total) * 100);
小猪八Q 2013-11-13
  • 打赏
  • 举报
回复
index<=total,所以你的progressBar1的value在int的/的时候,结果就是0和100,把index和total转化为double等类型的
全栈极简 2013-11-13
  • 打赏
  • 举报
回复
progressBar1.Value = Convert.ToInt32((index / total) * 100);,你测试看看是否每次Value都是自增的。

110,533

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧