BackgroundWorker更忙progressBar进度条失效问题。

newpowersky 2016-08-13 07:28:23
   private void button1_Click(object sender, EventArgs e)
{
string[] url=File.ReadAllLines(path);
foreach (var item in url)
{
ls.Add(item);
}
backgroundWorker1.RunWorkerAsync();//这个代码是启动backgroundWorker的.
//wc = new WebClient();
//foreach (var item in ls)
//{
// string filename = Path.GetFileName(item);
// wc.DownloadFile(item, "d:\\test\\" + filename + ".jpg");
//}
}

private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
BackgroundWorker bw = sender as BackgroundWorker;
wc = new WebClient();
int i = 0;
foreach (var item in ls)
{
string filename = Path.GetFileName(item);
wc.DownloadFile(item, "d:\\test\\"+ filename+".jpg");
//不加下面的语句可以下载讲到的文件,但是加了下面语句后只能下载第一条
bw.ReportProgress((int)Math.Ceiling((double)i / ls.Count* 100));//向外界报告进度
i++;//ReportProgress要用整数ls中又不是100的数所以所以想用上面的方法转换成百分比。
}
}


private void backgroundWorker1_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
progressBar1.Value = e.ProgressPercentage;
}

以上代码是把一件文件中的下载地址读到ls中,然后用backgroundworker组件的ReportProgress.方法通知ProgressChanged更更改界面上的progressBar1为什么没有反应呢?如果不加上 progressBar1.Value = e.ProgressPercentage;
...全文
176 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
newpowersky 2016-08-13
  • 打赏
  • 举报
回复
我已经用了Backupgroundworker组件了啊。 ProgressChanged这个方法可以是属于主线程的可以直接改的啊。 还有就是为什么加了
 bw.ReportProgress((int)Math.Ceiling((double)i / ls.Count* 100));/code]这个后[code=csharp]wc.DownloadFile(item, "d:\\test\\"+ filename+".jpg");
这只能下载一个文件了。注销的话可以把ls中的文件下完
john_QQ:2335298917 2016-08-13
  • 打赏
  • 举报
回复
非UI线程更改UI线程需要用invoke或者用begininvoke,事件的响应函数是在事件发出者线程中执行的

110,534

社区成员

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

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

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