2014-07-23 87 views
0

首先,让我说我已经完成了我的研究。我花了大约一天半的时间观看视频,阅读MSDN,测试和试验。我还没有解决这个问题。尽管我所有的研究都是这样,但这是一个相当广泛的问题,所以我对此表示歉意。这可能部分归因于Windows Phone 8.1的新功能。BackgroundTask澄清

我的目标是每小时增加一次int,即使应用程序未运行。显然,最好的方法是通过TimeTriggerBackgroundTask。我在我的解决方案中创建了另一个名为BackgroundTaskProject的项目(Windows Runtime Component)。我将其班级更名为BackgroundTaskClass。我参考了我主项目中的BackgroundTaskProject

BackgroundTaskClass中,我实施了IBackgroundTask及其Run方法。 问题1:如果我所要做的只是在主项目中增加一个值,那么在这个方法中有什么用处?如果是这样,什么?

我有复制并将我的RegisterBackgroundTask方法从MSDN粘贴到BackgroundTaskClass

在我的主项目中,我创建了我的TimeTrigger。我通过BackgroundTaskClass中的static RegisterBackgroundTask方法注册了我的BackgroundTask。我进行了更改,因此BackgroundTask由于await/async方法而被分配给类型为Task<BackgroundTaskRegistration>的变量。

最终的问题:我在哪里说myInt++每小时运行一次? (myInt是我的主要项目。)

我可以提供特定的代码或回答问题的要求,但这里是一些你可能需要:

在主体工程/类:

TimeTrigger hourlyTrigger = new TimeTrigger(60, false); 
Task<BackgroundTaskRegistration> task = BackgroundTaskProject.BackgroundTaskClass.RegisterBackgroundTask("BackgroundTaskProject.BackgroundTaskClass", "Number Incrementer", hourlyTrigger, null); 

BackgroundTaskClass

Copy and pasted from MSDN (http://msdn.microsoft.com/en-us/library/windows/apps/xaml/hh977055.aspx and http://msdn.microsoft.com/en-us/library/windows/apps/xaml/jj553413.aspx) 

回答

2

我不是很精通的Windows 8手机,但我可以看到你有一个基本的误解: 您的myInt去无处

问题是你正在假设东西会一直运行,但事实并非如此。

您的主应用程序可能会随时暂停,此时您应该保存所需的任何数据以恢复应用程序 - >即,一旦暂停您的应用程序消失并且它不再存储在内存中,因此没有myInt增量。

你的后台任务的运行速度会更糟:只要它完成run方法的执行,它就会从内存中移除 - >即,如果在后台任务中增加myInt,那么下一次触发后台任务时,设置为其初始值,因为它是新的后台任务。

正确的做法是:当您的应用第一次启动时,将myInt的时间和初始值保存到应用存储中。现在,无论何时您需要计算myInt的值,只需从这些初始值即时计算即可。

+0

我明白你在说什么,这种想法已经超越了我的想法,但我只是假设有一种方法可以从后台更改已保存的数据。您的建议无法正常工作的原因是因为我需要使用此数据更新活动磁贴(即使应用程序被暂停,它仍存在)。 – Evorlor

+1

http://thesociablegeek.com/windows-8/livetiles/modifying-live-tiles-in-a-background-process/ –

+0

嗯...似乎是一种工作,但似乎它应该工作!如果我接受你的建议并根据先前保存的值每30分钟计算一次myInt,我应该能够准确更新瓦片而不更新实际值!好文章! – Evorlor