BackgroundTask澄清

时间:2014-07-23 01:49:33

标签: c# windows-phone-8.1 background-task

首先,我要说我做了我的研究。我花了大约一天半的时间观看视频,阅读MSDN,测试和试验。我还没有解决这个问题。尽管我所有的研究,这将是一个相当广泛的问题,所以我为此道歉。部分原因可能部分归功于Windows Phone 8.1的新功能。

我的目标是每小时增加一次int,即使应用未运行也是如此。显然,最好的方法是通过TimeTriggerBackgroundTask。我在我的解决方案中创建了一个名为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)

1 个答案:

答案 0 :(得分:2)

我不太熟悉Windows 8手机,但我可以看到你有一个基本的误解: 你的myInt 无处

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

您的主要申请可能随时被暂停,此时您应该保存恢复申请所需的任何数据 - &gt;即一旦暂停你的应用程序已经消失,它不再在内存中,所以没有myInt增加。

你的后台任务更糟糕:一旦完成run方法的执行,它就会从内存中删除 - &gt;即如果你在后台任务中增加myInt,那么下次启动后台任务时,它将被设置为初始值,因为它是后台任务。

执行此操作的正确方法是:首次启动应用时,将myInt的时间和初始值保存到应用存储中。现在,只要你需要弄清myInt的值,只需从这些初始值中即时计算。