TransferstatusChanged et transfertProgresséChanged Evénements de fondTransferrequest dans Windows Phone ne s'appelle pas

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

Question

Je suis implémentant une application dans laquelle l'utilisateur aura la possibilité de télécharger les actifs (environ 750 Mo d'images, chacun d'une taille d'environ 50 Ko). Je ne peux pas faire cela à l'aide de l'utilisateur httpclient régulier, car si l'utilisateur appuie sur le bouton HOME, les API SendAsync / getasync ne fonctionnent pas à l'arrière-plan et ne se croisent pas lorsque l'utilisateur revient à l'application.

Ma seule option ici est d'utiliser l'arrière-planTransferservice que j'utilise comme suit: -

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);
    }

Les téléchargements sont terminés avec succès, mais pour une raison quelconque, les événements de fondtransferrequest_transferRequest_transferReQuest_TransferReQuest_TransferstatusChanged ne sont pas appelés et je ne peux pas libérer la file d'attente de téléchargement supplémentaire.

aide s'il vous plaît!

merci

Était-ce utile?

La solution

Le problème était que j'exécutais la boucle qui appelait le téléchargementAlagetoisOstore sur le fil de l'interface utilisateur.

L'état de transfert modifié et les événements modifiés de progression ont également besoin du fil de l'interface utilisateur.Dès que j'ai déplacé la fonction d'appel à un fil séparé, le statut et les progrès ont changé d'événements ont commencé à tirer comme prévu.

Autres conseils

Ce n'est pas la raison pour laquelle je crois.Vous avez ajouté la demande au service d'arrière-plan avec la fixation des gestionnaires.Les gestionnaires doivent être attachés avant d'ajouter la demande au service d'arrière-plan.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top