C# WebClient DownloadFileCompleted下载完成时根据不同参数做处理

在下载文件的时候我经常会用到webclient这个类。用这个下载文件很方便。向下面几行代码就可以搞定

        private void Button_Click(object sender, RoutedEventArgs e)
        {
            string url = @"https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1605970732950&di=80dea0f9dd6ee8bdab9a85494bd0dae3&imgtype=0&src=http%3A%2F%2Fsc.68design.net%2Fphotofiles%2F201405%2F6gGEGUx1aZ.jpg";

            WebClient wc = new WebClient();
            wc.DownloadFileCompleted += Wc_DownloadFileCompleted;
            wc.DownloadFileAsync(new Uri(url), "1.jpg");
        }

        private void Wc_DownloadFileCompleted(object sender, System.ComponentModel.AsyncCompletedEventArgs e)
        {
            MessageBox.Show("下载完成");
        }

但是我们往往不会只下载一个文件,更多的情况是多个,我们希望在下载完成时根据不同的参数做不同的处理。

我们可以看到AsyncCompletedEventArgs中包含一个UserState属性,我以为能设置这个值达到传递参数的目的。结果查了很久也没有查到怎么给这个参数赋值。

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
C#中,你可以使用WebClient类来下载文件并限制下载速度。你需要使用System.Threading命名空间中的Thread.Sleep方法来暂停下载,并将速度限制为所需的速度。 以下是一个简单的示例代码,它将下载速度限制为10KB/s: ``` using System.Net; using System.Threading; public void DownloadFile(string url, string fileName) { WebClient client = new WebClient(); client.DownloadProgressChanged += WebClient_DownloadProgressChanged; client.DownloadFileCompleted += WebClient_DownloadFileCompleted; using (var stream = client.OpenRead(url)) using (var output = File.Create(fileName)) { byte[] buffer = new byte[1024]; int bytesRead = 0; int downloadSpeed = 10 * 1024; // 10KB/s DateTime startTime = DateTime.Now; while ((bytesRead = stream.Read(buffer, 0, buffer.Length)) > 0) { output.Write(buffer, 0, bytesRead); // 计算已下载的字节数和间 long bytesDownloaded = output.Position; double secondsElapsed = (DateTime.Now - startTime).TotalSeconds; // 计算当前下载速度,并暂停下载 int currentSpeed = (int)(bytesDownloaded / secondsElapsed); if (currentSpeed > downloadSpeed) { int sleepTime = (int)(1000 * ((double)bytesRead / downloadSpeed - secondsElapsed)); if (sleepTime > 0) Thread.Sleep(sleepTime); } } } } private void WebClient_DownloadProgressChanged(object sender, DownloadProgressChangedEventArgs e) { // 下载进度改变的操作 } private void WebClient_DownloadFileCompleted(object sender, System.ComponentModel.AsyncCompletedEventArgs e) { // 下载完成的操作 } ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值