我正在实现一个应用程序,其中用户可以选择下载资产(大约750MB的图像,每个大小约为50kB)。 我无法使用常规httpclient来执行此操作,因为用户按下主页按钮,SendAsync / getAsync API在用户返回应用程序时不起作用。

我唯一的选择是使用我使用的backgroundTransferService如下: -

for(...)//calling the download function here
    DownloadImageToIsoStore(planImageUri, cemetery_id + "_plan_1.gif", countryName);


public void DownloadImageToIsoStore(Uri imageUri, string imageName,string countryName)
    {
        while ((BackgroundTransferService.Requests.Count()) >= 25) { Thread.Sleep(100); }//do not add if count is 25 since that is the limit. added this to wait till space frees up in the queue

        BackgroundTransferRequest backgroundTransferRequest = new BackgroundTransferRequest(imageUri);
        backgroundTransferRequest.Method = "GET";
        backgroundTransferRequest.DownloadLocation = new Uri("shared/transfers/" + imageName, UriKind.RelativeOrAbsolute);//shared/transfers is the required directory
        backgroundTransferRequest.Tag = countryName;//will check this when download is completed
        backgroundTransferRequest.TransferPreferences = TransferPreferences.AllowCellularAndBattery;

        BackgroundTransferService.Add(backgroundTransferRequest);

        backgroundTransferRequest.TransferStatusChanged +=  new EventHandler<BackgroundTransferEventArgs>(backgroundTransferRequest_TransferStatusChanged);
        backgroundTransferRequest.TransferProgressChanged +=  new EventHandler<BackgroundTransferEventArgs>(backgroundTransferRequest_TransferProgressChanged);

    }

void backgroundTransferRequest_TransferProgressChanged(object sender, BackgroundTransferEventArgs e)
    {
        long bytes = e.Request.BytesReceived;
        Debug.WriteLine(bytes);
    }

void backgroundTransferRequest_TransferStatusChanged(object sender, BackgroundTransferEventArgs e)
    {
        BackgroundTransferRequest backgroundTransferRequest = e.Request;
        BackgroundTransferService.Remove(backgroundTransferRequest);
    }
.

下载成功完成,但出于某种原因,BackgroundTransferRequest_TransferProgressChanged和BackgroundTransferRequest_TransferstatusChanged事件不会被称为,我无法释放任何其他下载的下载队列。

请帮忙!

感谢

有帮助吗?

解决方案

问题是我正在运行循环,该循环在UI线程上调用DownloadimageToisostore。

传输状态已更改和进展更改事件也显然需要UI线程。一旦我将呼叫函数移动到单独的线程,状态和进度更改事件已开始按预期触发。

其他提示

这不是我相信的原因。您将请求添加到后台服务,并通过附加处理程序。在将请求添加到后台服务之前,必须附加处理程序。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top