如何在注册后立即启动Windows应用程序后台任务?



我正在写一个Metro应用程序,只能在pc上运行(所以没有,或者至少更少,担心电池寿命)。我需要它注册和运行后台任务时,用户单击一个按钮。它注册得很好,但我没有办法让它在15分钟内运行,这对这个应用程序来说毫无用处。有什么办法让它立即运行吗?

我也在这里发现了一个类似的问题,说这是不可能的,但一定有人想出了一个方法。

编辑:

我要求完成这项任务的理由是:

我的应用程序将读取和写入文件,因为他们出现在一段较长的时间内,从几分钟到几个小时。在这段时间的大部分时间里,应用程序不太可能出现在前台。因为我需要代码能够继续执行,所以最好的方法似乎是创建一个后台任务,但我无法在Visual Studio之外手动启动该任务,尽管在Visual Studio中它可以完美地工作。如果有更合适的方法来处理这个执行,我愿意使用它。

EDIT

由于op的额外信息而进行的修订。

我认为你可以通过metro应用程序做到这一点的唯一方法是让你的用户将你的应用程序与桌面"快照"-在你的快照应用程序中,他们可以点击开始/停止,同时只使用桌面,两个应用程序都在前台运行。


我认为我的另一个答案不完整,所以我会尽量提供一个更好的答案。

澄清一下:你声明你使用后台任务的全部原因是,即使你的应用程序挂起,你的应用程序也会继续运行一些代码。

后台任务:

不能触发WinRT后台任务立即运行。

请记住,默认情况下后台任务每2小时有1秒的CPU时间,并且没有办法指定何时激活它-您只能使用机会触发-在这种情况下对您没有好处。

此外,即使你的应用程序是锁屏应用程序,你也不能指定立即处理后台任务,除非你使用推送通知,这并不适合你正在尝试做的事情。对于一个锁屏应用程序,你通常每15分钟得到2秒的CPU。

OnSuspending:

然而,如果你的应用程序被挂起,你仍然有几秒钟(5,根据这个:http://www.redlist.ch/post/Time-limit-on-suspending-a-WinRT-app.aspx)的时间来整理你的应用程序被操作系统挂起之前。无论如何,这个暂停宽裕时间比您在后台任务中的时间更长!

因此,我建议不要使用后台任务,而是启动一个后台线程(根据我的另一个答案)来做你的按键动作(使用本地状态来记录其进度)。现在,如果你还钩到App的onsuspend事件,你可以使用这个来查看是否有什么东西没有从按钮按下的动作完成,并完成它。

希望这有意义。好运!

我解决这个问题的方法是创建一个可以从应用程序和后台任务调用的公共函数。

在你的例子中,当用户点击注册按钮时,你可以注册任务,然后调用公共函数(从你的应用程序)。当任务运行时,它还可以调用相同的公共函数

如果你是基于一个UI动作(按钮按下)运行任务,你也可以钩到按钮按下事件,并在UI进程的一个新线程中启动你的任务。例如

new TaskFactory().StartNew(() => YourBackgroundTaskMethod())

你不会阻塞UI,如果你需要的话,你可以很容易地把结果从后台线程送回UI。

这样你就不必依赖你的应用程序被提升为锁屏应用程序-如果你想运行后台计时器任务,这是一个必要条件。

似乎您的用例将从通知系统中获益最多。当你创建文件时,你可以向你的应用程序发送通知(无论是从文件创建服务还是通过云服务与你的应用程序通信的桌面端. net 4.5应用程序)。

一般来说,你可以通过windows . ui . notifications.scheduletilenotification来安排tile通知每分钟更改一次。

您可以订阅原始推送通知事件。当你想启动进程时,你可以请求你的服务器发送一个原始的通知,这将激活你的后台任务。

最新更新