TransferstatusChanged и TransferProgresChanged события BackgroundTransferrequest в Windows Phone не звоните

StackOverflow https://stackoverflow.com//questions/24013765

Вопрос

Я реализую приложение, в котором пользователь будет иметь возможность загрузки активов (около 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 в потоке интерфейса.

Состояние передачи изменено и изменено прогресс событий, по-видимому, нуждается в потоке пользовательского интерфейса.Как только я переместил функцию вызова в отдельный поток, статус и прогресс изменяли события, начатые стрельбы, как и ожидалось.

Другие советы

Это не причина, по которой я верю.Вы добавили запрос на фоновый сервис без прикрепления обработчиков.Художественные обработчики должны быть прикреплены перед добавлением запроса на фоновый сервис.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top