【发布时间】:2015-06-10 20:14:53
【问题描述】:
我有一个带有后台任务的应用程序。此任务由 timertrigger 触发。当我注册它时,它会在定时器被触发后执行(每小时)。
但我也喜欢“随意”执行任务。我的应用程序可以向后台任务发送触发器,以便在计时器到期之前执行任务吗?或者我可以从后台任务调用 Run 方法吗?我该怎么做?
示例代码将不胜感激。这是我在后台任务中的 Run 方法。
public async void Run(IBackgroundTaskInstance taskInstance)
{
_deferral = taskInstance.GetDeferral();
if (!_listening)
{
taskInstance.Canceled += taskInstance_Canceled;
await ... // background logic goes here...
}
else
{
_deferral.Complete();
}
}
编辑
我同意 @Fred 将逻辑移至共享项目,将后台/前台与隔离存储进行通信。
问题是这样的: 在 Microsoft Band 上,我创建了一个磁贴。磁贴包含带有按钮的消息。当按下这样的按钮时,会引发一个事件。要捕获事件,您必须实例化一个 IBandClient。后台任务的问题是操作系统可以杀死你的任务。当它这样做时,不再处理磁贴事件,所以我想根据用户请求重新启动它。
因此,共享项目绝对是一种“通知”我的前台后台任务侦听器仍处于活动状态的方式。
但问题仍然存在:如何“单击按钮”启动后台任务?
【问题讨论】:
-
那么您希望前台的应用程序能够调用后台进程吗?不确定有什么方法可以做到这一点。您总是可以从后台进程中复制代码并将其包含在主应用程序的一个类中并调用它。可能不是您要寻找的答案,但我能想出的最佳答案。
-
感谢@kernanb 的想法。我想如果不可能的话,我应该尝试不同的方法。
标签: c# windows-phone-8.1 background-task