首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

为啥prograssbar没有及时更新

2013-11-15 
为什么prograssbar没有及时更新?代码如下,现象是listview可以一条一条加进去,这个正常,但为什么prograssba

为什么prograssbar没有及时更新?
代码如下,现象是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);


            }));
        }


[解决办法]
progressBar1.Value = Convert.ToInt32((index / total) * 100);,你测试看看是否每次Value都是自增的。
[解决办法]
index<=total,所以你的progressBar1的value在int的/的时候,结果就是0和100,把index和total转化为double等类型的
[解决办法]
可以这样写

     progressBar1.Value = Convert.ToInt32(((0.0 + index) / total) * 100);

热点排行