C# Windows Phone中BackgroundTransferRequest未被呼叫的TransferStatusChanged和TransferProgressChanged事件
我正在实施一个应用程序,用户可以选择下载大约750MB的图像,每个图像大小约为50KB。 我无法使用常规的HttpClient实现这一点,因为如果用户按下home按钮,SendAsync/GetAsync API在后台不工作,当用户返回应用程序时会崩溃 我在这里的唯一选择是使用BackgroundTransferService,我使用的服务如下:-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
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线程。当我将调用函数移动到一个单独的线程时,状态和进度更改事件开始按预期触发。这不是我相信的原因。您将请求添加到后台服务,但没有附加处理程序。在将请求添加到后台服务之前,必须附加处理程序