首先,我要说我做了我的研究。我花了大约一天半的时间观看视频,阅读MSDN,测试和试验。我还没有解决这个问题。尽管我所有的研究,这将是一个相当广泛的问题,所以我为此道歉。部分原因可能部分归功于Windows Phone 8.1的新功能。
我的目标是每小时增加一次int
,即使应用未运行也是如此。显然,最好的方法是通过TimeTrigger
和BackgroundTask
。我在我的解决方案中创建了一个名为Windows Runtime Component
的单独项目(BackgroundTaskProject
)。我将其课程重命名为BackgroundTaskClass
。我从我的主项目中引用了BackgroundTaskProject
。
在BackgroundTaskClass
中,我实施了IBackgroundTask
及其Run
方法。 问题1:如果我要做的只是在我的主项目中增加一个值,那么这个方法有什么用处吗?如果是这样,什么?
我已将RegisterBackgroundTask
方法从MSDN复制并粘贴到BackgroundTaskClass
。
在我的主项目中,我创建了TimeTrigger
。我通过BackgroundTask
中的static RegisterBackgroundTask
方法注册了我的BackgroundTaskClass
。我进行了更改,因此BackgroundTask
/ Task<BackgroundTaskRegistration>
方法会将await
分配给async
类型的变量。
最终的问题:我在哪里说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)
答案 0 :(得分:2)
我不太熟悉Windows 8手机,但我可以看到你有一个基本的误解: 你的myInt 无处。
问题是你假设某些东西会一直运行,但事实并非如此。
您的主要申请可能随时被暂停,此时您应该保存恢复申请所需的任何数据 - &gt;即一旦暂停你的应用程序已经消失,它不再在内存中,所以没有myInt增加。
你的后台任务更糟糕:一旦完成run方法的执行,它就会从内存中删除 - &gt;即如果你在后台任务中增加myInt,那么下次启动后台任务时,它将被设置为初始值,因为它是新后台任务。
执行此操作的正确方法是:首次启动应用时,将myInt的时间和初始值保存到应用存储中。现在,只要你需要弄清myInt的值,只需从这些初始值中即时计算。