so langsam weiß ich selbst nicht weiter.. In meiner App (es soll eine einfache Podcast-App werden) nutze ich den LongListMultiSelector aus dem Windows Phone Toolkit (neueste Version vom August 2013).
Iich nutze den LongListMultiSelector, um den Benutzer auswählen zu lassen, welche Episoden eines Podcast er herunterladen kann. Die Auswahl ist dabei gruppiert nach Erscheinungs-Monat der Episoden. Wählt ein Benutzer einen (oder mehrere) Episoden aus und drück auf den Button "Download", werden die ausgewählten Episoden heruntergeladen. Das Herunterladen übernimmt dabei der BackgroundTransferService. Der Haken an der Geschichte ist jetzt der: sobald man mehr als ein paar Episoden zum Herunterladen auswählt, spinnt die UI etwas herum. Wenn alle selektierten Einträge an den BackgroundTransferService geschickt wurden, solte IsSelectionEnabled beim LongListMultiSelector auf false gesetzt werden, aber irgendwie wird diese Aktion nicht direkt ausgeführt sondern scheinbar zurückgestellt. Außerdem werden beim Scrollen manche Einträge gar nicht mehr angezeigt.
Die Vermutung: Ich horche das Verändern des Fortschritts eines BackgroundTransferRequests, welches bei jeder Änderung die Progress-Eigenschaft einer Episode aktualisiert (was dank NotifyPropertyChanged auch die UI aktualisiert).
Ist es möglich, dass diese Aktualisierung dazu führt, dass sich das gesamte User Interface nicht korrekt verhält?
Anbei noch etwas Code, evtl. findet ja jemand von euch das Problem mit der Performance :)
Das ist der Code, der ausgeführt wird, wenn man auf den Download-Button drückt.
foreach (var request in this.transferRequests) { var episode = (from Episode e in App.LocalDB.Episodes where e.DownloadId == request.RequestId select e).FirstOrDefault();
if (episode != null) { this.Downloads.Add(episode);
/// <summary> /// Updates UI of MainPage.xaml /// </summary> public void UpdateUI() { var subscriptions = from Subscription s in App.LocalDB.Subscriptions select s;
this.SubscriptionsList = new List<Subscription>(subscriptions);
Sieht vielleicht jemand, wo hier die Performance der UI in die Knie geht?
LG Marcel
Update: Also entweder ich habe etwas beim BackgroundTransferService übersehen oder dessen Implementierung ist Schuld. In der Ausgabe in Visual Studio sieht man, wie in kürzester Zeit mehrere (viele!!) Thread beendet werden. Etwas rumprobieren ergab, dass diese Threads vom BackgroundTransferService gestartet werden.
Habe also entsprechend den Titel meiner Frage angepasst.
Hat evtl. jemand Erfahrung mit dem BackgroundTransferService in Zusammenhang mit mehreren Dateien?