none
BackgroundDownloader更新下载进度问题 RRS feed

  • 问题

  • 我使用BackgroundDownloader下载文件时,发现更新下载进度的频率非常小,
    比如一个10MB的文件,只会更新5次进度然后下载就完成了,这样导致更新的时间间隔非常长,看不出来正在下载,这个有办法可以控制吗?

    部分代码:

    DownloadOperation download = Downloader.CreateDownload(source, newfile);
    Progress<DownloadOperation> progressCallback = new Progress<DownloadOperation>((operation) => {
            // 一次下载里,只回调用几次,频率太小!!
    	if (operation.Progress.TotalBytesToReceive == 0 || operation.Progress.BytesReceived == 0)
    		task.ProgressValue = 0;
    	else
    	{
    		var value = operation.Progress.BytesReceived * 100 / operation.Progress.TotalBytesToReceive;
    		if (value >= 100)
    		{
    			var info = operation.GetResponseInformation();
    			if (info == null || info.StatusCode != 200)
    			{
    				task.Status = DownloadStatus.Failed;
    				return;
    			}
    			task.LocalPath = operation.ResultFile.Path;
    			task.Status = DownloadStatus.Completed;
    		}
    		task.ProgressValue = value;
    	}
    });
    task.Status = DownloadStatus.Start;
    await download.StartAsync().AsTask(CancelToken.Token, progressCallback);

    第二个问题,当有多个下载时,是用一个BackgroundDownloader.Create多个DownloadOperation好,还是实例化多个BackgroundDownloader好?

    2012年7月2日 9:21

答案

  • 这个间隔长短我这里测试了,虽然说间隔有几秒长,但其没有报错,属于正常。我只能帮你将这个反馈提交上去,看看是否可以尽量的将report进度的频率提高。

    不过我测试发现,回调次数也受到网络速率和运行环境的影响,我的测试结果是大约5秒一次。


    Bob Bao [MSFT]
    MSDN Community Support | Feedback to us

    • 已标记为答案 troyou 2012年7月4日 8:08
    2012年7月4日 6:38
    版主

全部回复

  • 我在使用的时候发现,progressCallback大概一秒钟会被调用到一次,但是如果如果我使用了DownloadOperation的Pause()方法,再使用Resume()方法,之后progressCallback的的调用会变得比较频繁。

    第二个问题同样关注!

    2012年7月2日 13:02
  • 第一个问题,频率的问题,是异步调用来控制的,并没有什么属性可以去设置。如Ivan Shi所说,那样的方式可以提高。

    第二个问题,Create多个DownloadOperation,然后由DownloadOperation AttachAsync去实现多任务。

    当然,实现多个BackgroundDownloader也可以做到并行,但不宜过多。


    Bob Bao [MSFT]
    MSDN Community Support | Feedback to us

    2012年7月3日 9:13
    版主
  • 如果一秒会被调用一次,我不会觉得频率小了,现在是大概20秒一次。

    比如一个文件10M,直到下载了2M的时候,才回调一次,下载了4M时又回调一次,这不正常吧

    2012年7月3日 12:55
  • 这个间隔长短我这里测试了,虽然说间隔有几秒长,但其没有报错,属于正常。我只能帮你将这个反馈提交上去,看看是否可以尽量的将report进度的频率提高。

    不过我测试发现,回调次数也受到网络速率和运行环境的影响,我的测试结果是大约5秒一次。


    Bob Bao [MSFT]
    MSDN Community Support | Feedback to us

    • 已标记为答案 troyou 2012年7月4日 8:08
    2012年7月4日 6:38
    版主
  • 谢谢Bob的回答。

    另外这个问题是RP版才有的,以前的版本频率还是挺快的,同样的资源,所以应该不完全是网络环境的原因。

    2012年7月4日 8:07