Ergebnis 1 bis 3 von 3
-
Mich gibt's schon länger
- 25.09.2013, 21:58
- #1
Hallo zusammen
Ich habe mal wieder eine Frage bezüglich dem asynchronen Ausführen von Code. Mein Ziel ist es, beim Programmstart das LiveTile zu aktualisieren, ohne das der Programmstart drastisch verlangsamt wird.
Das aktualisieren funktioniert soweit schon einwandfrei, wo ich jetzt noch ein Problem habe, ist beim Teil mit der Performance. Aufgerufen wird das Ganze im App.xaml.cs. Die Idee war über Task.Factory den Code in einem eigenen Thread ausführen zu lassen:
Code:Action actionUpdateTile = () => Deployment.Current.Dispatcher.BeginInvoke(Utilities.UpdateTile); Task.Factory.StartNew(actionUpdateTile);
Code:public static void UpdateTile() { try { var tileData = new RadCycleTileData(); var dbLIst = App.ViewModel.LoadTileLocations(); var locationList = dbLIst.Where( x => !String.IsNullOrEmpty(x.ImageUri) && !String.IsNullOrEmpty(x.ImageName)) .Reverse() .Take(9) .ToList(); var uriList = new List<Uri>(); var i = 0; using (var file = IsolatedStorageFile.GetUserStoreForApplication()) { foreach (var item in locationList) { try { using (var fileStream = file.OpenFile("Shared/ShellContent/" + i + ".jpg", FileMode.Create)) { var bmp = new WriteableBitmap(GetImage(item.ImageName)); bmp.SaveJpeg(fileStream, bmp.PixelWidth, bmp.PixelHeight, 0, 30); uriList.Add(new Uri("isostore:/shared/ShellContent/" + i + ".jpg", UriKind.Absolute)); i++; } } catch (Exception) {} } } tileData.CycleImages = uriList; LiveTileHelper.UpdateTile(ShellTile.ActiveTiles.FirstOrDefault(), tileData); } catch (OutOfMemoryException ex) { Api.LogError( "Zuviel Speicherverbrauch beim Tile Aktualisieren. Aktueller Memory Verbrauch: " + Microsoft.Phone.Info.DeviceStatus.ApplicationCurrentMemoryUsage + "Peak: " + Microsoft.Phone.Info.DeviceStatus.ApplicationPeakMemoryUsage, ex); } catch (Exception ex) { Api.LogError(ex.Message, ex); } }
Danke und Gruss
-
Gehöre zum Inventar
- 26.09.2013, 09:40
- #2
Das Problem ist dass das Rendering in WritableBitmaps eigentlich immer auf dem UI-Thread geschehen muss. D.h. dein Hintergrundthread wird wohl durch die Telerik-Klassen dafür automatisch wieder mit dem UI-Thread synchronisiert. Eine Möglichkeit die mir jetzt einfallen würde, wäre halt das Rendering erst zu starten wenn die App fertig geladen ist.
Was mich halt eher wundert ist, dass das Rendering da bei dir so lange zu dauern scheint. Sonst gäbe es ja nicht so eine große Verzögerung.
-
Mich gibt's schon länger
- 26.09.2013, 13:34
- #3
Danke für deine Antwort. Das erklärt einiges. Wenn ich es erst nach dem Start anwerfe klappt es soweit das der Start nicht verlangsamt wird. Jedoch kann ich dann ein paar Sekunden nichts anwählen, was auch nicht optimal ist.
Ich habe nochmals nachgemessen. Ohne die Funktion dauert es ca. 2-3 Sekunden zum öffnen der App. Mit ca 6-7, was doch ein ziemliche Verschlechterung ist. Ich vermute dass das so lange dauert weil ich die Bilder beim laden aus der Medienbibliothek in der vollen Auflösung bekommen. Allenfalls wäre es der bessere Weg hier mit einer Optimierung anzusetzen.
Ähnliche Themen
-
Tile Benachrichtigung beim XBox Live Hub geht nicht
Von ChrisXP im Forum Windows Phone 7 AllgemeinAntworten: 0Letzter Beitrag: 25.09.2011, 21:45 -
Probleme beim Aktualsieren und telefonieren..
Von Unregistriert im Forum HTC HD2 SonstigesAntworten: 1Letzter Beitrag: 16.12.2009, 15:37 -
Display Auflösung beim Programmstart abfragen
Von klovierb im Forum ProgrammierenAntworten: 2Letzter Beitrag: 13.04.2009, 14:32 -
Sound beim Einschalten
Von Ddriver im Forum PlaudereckeAntworten: 8Letzter Beitrag: 22.05.2003, 11:17 -
Display-Flimmern beim Loox
Von Newton im Forum PlaudereckeAntworten: 1Letzter Beitrag: 28.10.2002, 20:46
Pixel 10 Serie mit Problemen:...