问题:
我已经实现了Stopwatch
运行,并将值添加到实时磁贴中。但是当我墓碑或关闭应用程序时,秒表会停止运行。
因此,这会产生一个问题,即应用程序关闭后,秒表的经过时间的初始值仅更新为实时图块。
问题:
我想知道当应用程序被杀死时可以使用哪些选项来运行秒表,并随后使用更新的秒表值定期调用CreateLiveTile方法?
我之前没有尝试过这种类型的功能,所以我正在寻找一些关于这个平台提供什么的反馈来实现这一目标。
代码:
这实际上是运行秒表的代码和单独的方法CreateLiveTile()
,它以经过时间为参数创建一个新的实时图块:
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);
}
}
答案 0 :(得分:1)
如果您希望在应用关闭后保留它,可以在静态变量或文件中保存您的开始时间。我建议使用DateTime
结构。
这是一个极其简化的例子
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));
}
为了跟踪应用程序关闭后计时器的启动时间,您必须将变量保存到硬盘驱动器中。
这也只是将DateTime存储到文件中的一种非常简单(并且在我看来很方便)的方式。还有其他方法可以做到这一点,但对于某些事情,这个简单的纯文本很高兴看到出现问题。