TransferstatusChanged и TransferProgresChanged события BackgroundTransferrequest в Windows Phone не звоните
-
21-12-2019 - |
Вопрос
Я реализую приложение, в котором пользователь будет иметь возможность загрузки активов (около 750 МБ в изображениях, каждый из которых составляет около 50 КБ по размеру). Я не могу сделать это, используя регулярный httpClient, поскольку, если пользователь нажимает кнопку HOME, APIS SENDASYNC / Getasync не работают на заднем плане и сбой, когда пользователь возвращается к приложению.
Мой единственный вариант здесь - использовать 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_transferpressChanged и backgroundtransferrequest_transferstatuschanged события не вызываются, и я не вызывающую, и я не могу освободить очередь загрузки для любых дополнительных загрузок.
Пожалуйста, помогите!
Спасибо
Решение
Проблема заключалась в том, что я управлял петлей, которая называла DownloadImageToisoSoSoSoSoStore в потоке интерфейса.
Состояние передачи изменено и изменено прогресс событий, по-видимому, нуждается в потоке пользовательского интерфейса.Как только я переместил функцию вызова в отдельный поток, статус и прогресс изменяли события, начатые стрельбы, как и ожидалось.
Другие советы
Это не причина, по которой я верю.Вы добавили запрос на фоновый сервис без прикрепления обработчиков.Художественные обработчики должны быть прикреплены перед добавлением запроса на фоновый сервис.