progressBar 如何与下载的文件同步
下载一个文件结束后进度条也正好结束button1 name下载
进度条 progressBar
处理下载的事件
我刚开始学习 请各位大哥们多多指导啊
先谢谢啦 --------------------编程问答-------------------- 那么你需要取得实际的进度。 --------------------编程问答--------------------
private void ProcDownload()
{
evtPerDonwload = new ManualResetEvent(false);
foreach (DownloadFileInfo file in this.downloadFileList)
{
total += file.Size;
}
while (!evtDownload.WaitOne(0, false))
{
if (this.downloadFileList.Count == 0)
break;
DownloadFileInfo file = this.downloadFileList[0];
//Debug.WriteLine(String.Format("Start Download:{0}", file.FileName));
this.ShowCurrentDownloadFileName(file.FileName);
//下载
clientDownload = new WebClient();
clientDownload.DownloadProgressChanged += new DownloadProgressChangedEventHandler(OnDownloadProgressChanged);
clientDownload.DownloadFileCompleted += new AsyncCompletedEventHandler(OnDownloadFileCompleted);
evtPerDonwload.Reset();
if (File.Exists(file.FileFullName))
{
File.Delete(file.FileFullName);
}
//clientDownload.DownloadFileAsync(new Uri(file.DownloadUrl), Path.Combine(AppDomain.CurrentDomain.BaseDirectory, file.FileFullName + ".tmp"), file);
clientDownload.DownloadFileAsync(new Uri(file.DownloadUrl), file.FileFullName, file);
//clientDownload.DownloadFileAsync(new Uri(file.DownloadUrl), file.FileFullName);
//等待下载完成
evtPerDonwload.WaitOne();
clientDownload.Dispose();
clientDownload = null;
//移除已下载的文件
this.downloadFileList.Remove(file);
}
//Debug.WriteLine("All Downloaded");
if (this.downloadFileList.Count == 0)
Exit(true);
else
Exit(false);
evtDownload.Set();
}
void OnDownloadFileCompleted(object sender, AsyncCompletedEventArgs e)
{
DownloadFileInfo file = e.UserState as DownloadFileInfo;
nDownloadedTotal += file.Size;
this.SetProcessBar(0, (int)(nDownloadedTotal * 100 / total));
//Debug.WriteLine(String.Format("Finish Download:{0}", file.FileName));
//替换现有文件
//string filePath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, file.FileFullName);
//if (File.Exists(filePath))
//{
// if (File.Exists(filePath + ".old"))
// File.Delete(filePath + ".old");
// File.Move(filePath, filePath + ".old");
//}
//File.Move(filePath + ".tmp", filePath);
//继续下载其它文件
evtPerDonwload.Set();
}
void OnDownloadProgressChanged(object sender, DownloadProgressChangedEventArgs e)
{
this.SetProcessBar(e.ProgressPercentage, (int)((nDownloadedTotal + e.BytesReceived) * 100 / total));
}
delegate void ShowCurrentDownloadFileNameCallBack(string name);
private void ShowCurrentDownloadFileName(string name)
{
if (this.labelCurrentItem.InvokeRequired)
{
ShowCurrentDownloadFileNameCallBack cb = new ShowCurrentDownloadFileNameCallBack(ShowCurrentDownloadFileName);
this.Invoke(cb, new object[] { name });
}
else
{
this.labelCurrentItem.Text = name;
}
}
delegate void SetProcessBarCallBack(int current, int total);
private void SetProcessBar(int current, int total)
{
if (this.progressBarCurrent.InvokeRequired)
{
SetProcessBarCallBack cb = new SetProcessBarCallBack(SetProcessBar);
if (total > progressBarCurrent.Maximum)
total = progressBarCurrent.Maximum;
this.Invoke(cb, new object[] { current, total });
}
else
{
this.progressBarCurrent.Value = current;
this.progressBarTotal.Value = total;
}
}
补充:.NET技术 , C#