c#使用异步下载多个文件
我有这段代码,可以很好地下载一个文件 如何为该代码添加多个要下载的文件c#使用异步下载多个文件,c#,asynchronous,downloadfile,C#,Asynchronous,Downloadfile,我有这段代码,可以很好地下载一个文件 如何为该代码添加多个要下载的文件 private void Form1_Load(object sender, EventArgs e) { WebClient client = new WebClient(); client.DownloadProgressChanged += Client_DownloadProgressChanged; client.DownloadFileCompleted += Client_Do
private void Form1_Load(object sender, EventArgs e)
{
WebClient client = new WebClient();
client.DownloadProgressChanged += Client_DownloadProgressChanged;
client.DownloadFileCompleted += Client_DownloadFileCompleted;
client.DownloadFileAsync(new Uri("http://download.thinkbroadband.com/10MB.zip"), @"c:\folder\10MB.zip");
}
private void Client_DownloadFileCompleted(object sender, AsyncCompletedEventArgs e)
{
MessageBox.Show("completed");
}
private void Client_DownloadProgressChanged(object sender, DownloadProgressChangedEventArgs e)
{
progressBar1.Maximum = (int)e.TotalBytesToReceive / 100;
progressBar1.Value = (int)e.BytesReceived / 100;
}
您可以创建多个进度条和多个web客户端。每个
WebClient
都应该使用适当的进度条。您可以创建多个进度条和多个web客户端。每个WebClient
都应该使用适当的进度条。多次调用DownloadFileAsync()
。如果您的问题是“但是如何更新我的进度条”,恭喜您,您要求的是一个无法解决的问题的答案。你事先不知道这些文件会有多大,所以你必须想一个替代方案。例如,如果要下载10个文件,请让每个文件在进度条上代表10%。()@CodeCaster:你可以用HttpWebRequest而不是WebClient发送请求。这个类更复杂,提供了更多的特性。如果服务器提供内容长度,则您可以获得需要下载的总字节数。您不需要立即读取流,您可以随时按顺序读取所有流。@CodeCaster这不是不可能的,但也不是微不足道的,而且可能无法使用WebClient完成。使用HttpClient,OP可以在开始下载之前检查响应头中每个文件的大小。这可以设置最大值。进度事件应更新单个接收的计数器。事实上,多个下载操作可以发布到同一个Progress
对象,确保一次只处理一个更新事件。@PanagiotisKanavos HttpClient也利用此信息,即在显示的DownloadProgressChanged
事件中(e.TotalBytesToReceive
)。然而,您并不总是知道HTTP响应将有多大,例如在读取分块响应时。请参阅.CallDownloadFileAsync()
多次。如果您的问题是“但是如何更新我的进度条”,恭喜您,您要求的是一个无法解决的问题的答案。你事先不知道这些文件会有多大,所以你必须想一个替代方案。例如,如果要下载10个文件,请让每个文件在进度条上代表10%。()@CodeCaster:你可以用HttpWebRequest而不是WebClient发送请求。这个类更复杂,提供了更多的特性。如果服务器提供内容长度,则您可以获得需要下载的总字节数。您不需要立即读取流,您可以随时按顺序读取所有流。@CodeCaster这不是不可能的,但也不是微不足道的,而且可能无法使用WebClient完成。使用HttpClient,OP可以在开始下载之前检查响应头中每个文件的大小。这可以设置最大值。进度事件应更新单个接收的计数器。事实上,多个下载操作可以发布到同一个Progress
对象,确保一次只处理一个更新事件。@PanagiotisKanavos HttpClient也利用此信息,即在显示的DownloadProgressChanged
事件中(e.TotalBytesToReceive
)。然而,您并不总是知道HTTP响应将有多大,例如在读取分块响应时。看见