Tile NavigationUri im Background Task Problem
Hallo Entwickler,
ich vermute fast einen Bug im Background Task gefunden zu haben, weil ich mir das Verhalten meines Codes nicht anders erklären kann.
Ich habe einen Background Agent, der den Titel aller Tiles meiner App durch einen Parameter aus der NavigationUri des Tiles ersetzten soll.
Sobald ich aber einen Substring der NavigationUri Abfragen möchte, bekomme ich eine OutOfRangeException und die Locals zeigen mir an, dass der String in dem ich meine Uri speicher lediglich ein "/" enthält.
Wenn ich aber den Titel meines Tiles gleich dem String mit der Uri setze funktioniert es wunderbar.
Nur dass ich halt nicht die ganze Uri möchte, sondern bloß einen Teil davon.
Code:
protected override void OnInvoke(ScheduledTask task)
{
foreach (ShellTile cTile in ShellTile.ActiveTiles)
{
StandardTileData Update = new StandardTileData();
string navUri = cTile.NavigationUri.ToString();
// Update.Title = navUri; <- Funktioniert!
Update.Title = navUri.Substring(2, 4); // <- Funktioniert nicht
cTile.Update(Update);
}
NotifyComplete();
}
Sieht jemand spontan, was ich falsch mache?
Ich kann mir das Verhalten nicht erklänren. (Und ja, meine Uri ist natürlich eigentlich schon lang genug für die Substring Anweisung)
Ich freue mich auf Kommentare und hoffe sehr, dass wir eine Lösung finden können.
AW: Tile NavigationUri im Background Task Problem
Ohne dass ich jetzt selbst etwas getestet habe, schreibe ich hier mal, was ich mir denke:
ShellTile.ActiveTiles enthält alle Tiles deiner App - insbesondere auch den "Haupt"-Tile. Dieser ist meines Wissens nach immer der erste in der Collection und müsste logischerweise immer die NavigationUri "/" haben. Diese kann man ja auch gar nicht beeinflussen, da er eben auf den "Haupteinstiegspunkt" der App zeigt.
Da du dich wahrscheinlich nur für die Secondary Tiles interessierst, solltest du wahrscheinlich in der Schleife den ersten Tile in der Collection überspringen, um das von dir gewünschte Verhalten zu bekommen.
AW: Tile NavigationUri im Background Task Problem
Ich habe das jetzt mal getestet.
Ich habe ein Tile erstellt und dann den Code ausgeführt.
Dein Problem liegt dadrin, dass anscheinend Standardmässig schon ein Element in den ActiveTiles drin ist, welches nur eine Uri mit "/" hat. Dadurch stürzt dein Programm dann ab.
füge ein "using System.Linq;" am Anfang ein und ändere deinen Code wie folgt:
Code:
System.Collections.Generic.IEnumerable<ShellTile> tiles = ShellTile.ActiveTiles.Where(x => x.NavigationUri.ToString().Length > 2);
foreach (ShellTile cTile in tiles)
{
StandardTileData Update = new StandardTileData();
string navUri = cTile.NavigationUri.ToString();
//Update.Title = navUri; //<- Funktioniert!
Update.Title = navUri.Substring(2, 4); // <- Funktioniert nicht
cTile.Update(Update);
}
Edit: Wenn leitning recht hat und es wirklich immer das erste Element ist, könntest du auch nur das erste Überspringen. Wäre allerdings sicherer, wenn du wirklich bevor du etwas updatest schaust ob die Uri die richtige Länge hat. In deinem Fall wäre am sichersten ein Length > 6
AW: Tile NavigationUri im Background Task Problem
Klatsch! (Mit der flachen Hand auf die Stirn)
Au Mann, bin ich blöd. Natürlich liegt es daran. Ich habe es dir ganze Zeit mit einem Secondary Tile getestet und bin dabei natürich davon ausgegangen, dass die Schleife auch nur einmal durchlaufen wird. Warum ich das Primary Tile vergessen habe kann ich mir grad auch nicht erklären :D
Das kommt davon, wenn man in der Uni programmiert und mit einem Ohr der Vorlesung folgen muss...
Vielen Dank für eure Hilfe!