0

Ausgabe:Wie Stoppuhr nach App Tombstone ausführen?

ich einen Stopwatch implementiert haben, das läuft und der Wert wird zu einem Live-Kachel hinzugefügt. Aber wenn ich den Grabstein schließe oder die App schließe, hört die Stoppuhr auf zu laufen.

Dies ist also ein Problem, bei dem der Anfangswert der abgelaufenen Zeit der Stoppuhr nur auf die Live-Kachel aktualisiert wird, nachdem die App geschlossen wurde.

Frage:

Ich frage mich, welche Optionen verfügbar sind eine Stoppuhr laufen, während die App aufrufen getötet wurde ausgeschaltet und anschließend die CreateLiveTile Verfahren in regelmäßigen Abständen mit dem aktualisierten Stoppuhr Wert?

Ich habe diese Art von Funktion nicht zuvor versucht, also bin ich auf der Suche nach etwas Feedback, was diese Plattform zu bieten hat, um dies zu erreichen.

Code:

Dies ist im Wesentlichen der Code, der die Stoppuhr und die separaten Verfahren läuft CreateLiveTile(), die mit der verstrichenen Zeit als Parameter eine neue Live-Kachel erstellt:

private async Task ShowTimerConfirmationDialog() 
    { 
     //Set timer for current parking tag 
     SetParkingTagTimer(); 

     //Create the live tile 
     CreateLiveTile(); 

    } 


    private void SetParkingTagTimer() 
    { 

     //set timer to current elapsed time 
     StopWatch.Start(); 
     // Get the elapsed time as a TimeSpan value. 
     var ts = (SelectedParkDuration ?? StopWatch.Elapsed) - StopWatch.Elapsed; 

     // Format and display the TimeSpan value. 
     ElapsedTime = String.Format("{0:00}:{1:00}:{2:00}.{3:00}", 
      ts.Hours, ts.Minutes, ts.Seconds, 
      ts.Milliseconds/10); 
    } 

    private void CreateLiveTile() 
    { 
     var tileXml = TileUpdateManager.GetTemplateContent(TileTemplateType.TileSquare150x150PeekImageAndText01); 

     var tileImage = tileXml.GetElementsByTagName("image")[0] as XmlElement; 
     tileImage.SetAttribute("src", "ms-appx:///Assets/Logo.scale-140.png"); 

     var tileText = tileXml.GetElementsByTagName("text"); 
     (tileText[2] as XmlElement).InnerText = "Time remaining:"; 
     (tileText[3] as XmlElement).InnerText = " " + ElapsedTime; 

     var tileNotification = new TileNotification(tileXml); 
     TileUpdateManager.CreateTileUpdaterForApplication().Update(tileNotification); 

    } 


} 
+1

Sie müssen Hintergrundaufgabe erstellen. Siehe http://sanathwindowsdev.blogspot.in/2014/11/background-task-in-windows-phone-81.html – Archana

Antwort

1

könnten Sie sparen Wenn Sie möchten, dass die Startzeit in einer statischen Variablen oder in einer Datei beibehalten wird, nachdem die App geschlossen wurde. Ich würde empfehlen, eine DateTime Struktur zu verwenden.

Hier ist ein extrem vereinfachtes Beispiel

private static DateTime startTime; 
private const string START_TIME_FILENAME = "./your/path.txt" 

public static void StartStopWatch() 
{ 
    // Persist this variable until the app is closed 
    startTime = DateTime.Now; 

    //Persist this variable until it is overwritten 
    System.IO.File.WriteAllText(START_TIME_FILENAME, startTime.ToString()); 
} 

// Get the difference in time since you started the stopwatch and now 
public static TimeSpan Elapsed() 
{ 
    if (startTime == null) 
    { 
     startTime = GetStartTime(); 
    } 

    return DateTime.Now - startTime; 
} 

// Call this method to get the start time after the app has been closed 
private static DateTime GetStartTime() 
{ 
    return Convert.ToDateTime(System.IO.File.ReadAllText(START_TIME_FILENAME)); 
} 

Um den Überblick zu behalten, wenn der Timer gestartet wurde, auch nachdem die App geschlossen ist, können Sie die Variable auf Ihrer Festplatte speichern müssen.

Auch dies ist nur eine sehr einfache (und meiner Meinung nach bequeme) Möglichkeit, eine DateTime in eine Datei zu speichern. Es gibt andere Möglichkeiten, es zu tun, aber für etwas ist dieser einfache Klartext schön zu sehen, wenn etwas schief geht.

+0

Während das scheint eine gute Idee, den Timer-Wert zu speichern, brauche ich auch einen Hintergrund-Service, der sollte CreateLiveTile() regelmäßig aufrufen und mit der seit dem Schließen der App verstrichenen Zeit aktualisieren. –

+0

Meine Kenntnisse über Windows Phone 8.1 sind begrenzt, also lassen Sie mich wissen, wenn Sie das nicht können, aber können Sie nicht einfach die Datei von Ihrem Hintergrunddienst lesen? –

+0

In der Tat ist hier ein Link zu StackOverflow, die Antworten darauf gibt, wie Sie Daten zwischen Ihrer App und einem Hintergrunddienst Windows Phone 8.1 teilen können. Sieht so aus, als müssten Sie eine Datenbank verwenden oder, wie gesagt, die Startzeit in einer Datei speichern. [http://stackoverflow.com/questions/11390084/share-data-between-main-app-and-periodic-task](http://stackoverflow.com/questions/11390084/share-data-between-main -app-and-periodic-task) –