C# Windows Phone中BackgroundTransferRequest未被呼叫的TransferStatusChanged和TransferProgressChanged事件

C# Windows Phone中BackgroundTransferRequest未被呼叫的TransferStatusChanged和TransferProgressChanged事件,c#,windows-phone-7,windows-phone-8,windows-phone,background-transfer,C#,Windows Phone 7,Windows Phone 8,Windows Phone,Background Transfer,我正在实施一个应用程序,用户可以选择下载大约750MB的图像,每个图像大小约为50KB。 我无法使用常规的HttpClient实现这一点,因为如果用户按下home按钮,SendAsync/GetAsync API在后台不工作,当用户返回应用程序时会崩溃 我在这里的唯一选择是使用BackgroundTransferService,我使用的服务如下:- for(...)//calling the download function here DownloadImageToIsoStore(p

我正在实施一个应用程序,用户可以选择下载大约750MB的图像,每个图像大小约为50KB。 我无法使用常规的HttpClient实现这一点,因为如果用户按下home按钮,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\u TransferProgressChanged和backgroundTransferRequest\u TransferStatusChanged事件,我无法释放下载队列以进行任何其他下载

请帮忙


谢谢

问题是我正在运行在UI线程上调用DownloadImageToIsoStore的循环


传输状态更改和进度更改事件显然也需要UI线程。当我将调用函数移动到一个单独的线程时,状态和进度更改事件开始按预期触发。

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