2013-02-21 6 views
6

Ich plane gerade einige Kachel-Updates und stelle fest, dass die .Clear() -Methode nicht zu funktionieren scheint. Es sollte 'Entfernt alle Updates und kehrt zu seinem Standardinhalt zurück, wie im App-Manifest' (MSDN)Warum entfernt TileUpdater.Clear() nicht alle Updates?

EDIT: Cheeky MS! In der Dokumentation für diese Methode heißt es: 'Hinweis: Diese Methode stoppt nicht regelmäßige Updates'

Sagen Sie, ich plane 3000 Updates (nicht das, was ich tun werde BTW!), Nach dem Aufruf deaktivieren Sie die Anzahl ist immer noch 3000.

enter image description here

die gleiche Frage wurde hier gefragt: TileUpdater.Clear() not freeing up notifications quota, und die einzige Empfehlung war es, manuell jede und eines des Updates zu entfernen.

Ich entschied mich zu testen, wie viel Zeit mit der StopWatch-Klasse dauern würde, und es dauerte etwas über 11 Sekunden, 18 Sekunden mit der maximalen Anzahl der geplanten Updates bei 4096, - so dass die Lösung ein bisschen verrückt scheint.

enter image description here

Da ich gewohnt Zeitplan mehr als ein paar Tage im Voraus auf Stundenbasis und wahrscheinlich eine Hintergrundaufgabe mit einem Wartungs Trigger verwenden, um neue hinzufügen ich mit der Entfernung-Schleife in Ordnung sein werde. Aber ich hoffe immer noch, dass ich hier etwas falsch mache und dass es eine bessere Lösung gibt.

Also, wissen Sie, warum .Clear() funktioniert nicht, und was wäre die beste Alternative? Hier

ist der Code, wenn Sie diesen einen Versuch geben möchten:

private void Button_Click_1(object sender, RoutedEventArgs e) 
    { 

     var updater = TileUpdateManager.CreateTileUpdaterForApplication(); 
     updater.Clear(); 
     var test = updater.GetScheduledTileNotifications(); 

     var stopWatch = new Stopwatch(); 
     stopWatch.Start(); 
     foreach (var update in test) 
     { 
      updater.RemoveFromSchedule(update); 
     } 
     stopWatch.Stop(); 
     var time = stopWatch.Elapsed; 

     notify.Text = String.Format("{0:00}:{1:00}:{2:00}.{3:00}", 
      time.Hours, time.Minutes, time.Seconds, 
      time.Milliseconds/10); 

     for (int i = 0; i < 4096; i++) 
     { 
      var wide = TileContentFactory.CreateTileWideText09(); 
      var square = TileContentFactory.CreateTileSquareText04(); 
      wide.TextHeading.Text = "The heading"; 

      wide.TextBodyWrap.Text = "The body text for notification: " + i; 
      square.TextBodyWrap.Text = "The body text for notification: " + i; 

      wide.SquareContent = square; 

      var tileNotification = new ScheduledTileNotification(wide.GetXml(), DateTime.Now.AddMinutes(i + 1)); 
      updater.AddToSchedule(tileNotification); 
     } 
    } 

Antwort

1

Iris,

löschen löscht nur die Änderungen Fliese.

http://msdn.microsoft.com/en-us/library/windows/apps/windows.ui.notifications.tileupdater.clear.aspx

StopPeriodicUpdate bricht nur geplante Updates sie jedoch nicht entfernen. http://msdn.microsoft.com/en-us/library/windows/apps/windows.ui.notifications.tileupdater.stopperiodicupdate.aspx

Fazit ist - Funktionalität ist nicht da. Dokumentation ist nicht klar/.NET wie wo Clear würde bedeuten, Clear und nicht Inhalt zurücksetzen. Trauriger Zustand, aber das ist alles, was wir haben

+0

Ich weiß über die StopPeriodicUpdates, aber ich verpasse die 'Hinweis Diese Methode stoppt nicht regelmäßige Updates'. Wirklich schlechte Namensgebung, Clear() sollte SetToDefaultTile() sein. Wie nervig. Also die Schleife ist es dann :(Ah naja, vielen Dank für die Hilfe hier und auf Twitter Kumpel :) –

+1

keine Sorgen .. mit WinRT sind wir wieder in COM Ära der schlechten Benennung :) all diese wunderbaren .NET-Konventionen scheinen verschwunden zu sein .. Eine gute Sache .. zumindest müssen Sie TileUpdateFactory.CoCreateTileUpdaterForAppEx nicht aufrufen –

Verwandte Themen