SWIG - C#从UWP后台任务或扩展执行调用

时间:2017-08-25 16:49:59

标签: uwp windows-10 swig background-task

我想知道是否有人尝试从UWP后台任务,扩展执行或激活触发器中调用C ++库中的swig C#包装器?

我的C#swig包装器提供用C ++编写的功能,它处理对云等服务的网络调用。它可能下载或上传文件,如文档,图像等,或者它可能只是将它们与本地机器副本同步。

我最近在UWP应用程序中进行了大量有关后台激活和前景激活主题的阅读/研究。到目前为止,我发现了:

  • 后台任务可以在UWP应用程序的进程内和进程外运行,但限制为25秒+5秒的执行时间。
  • 使用“应用程序触发器”的后台任务限制为10分钟
  • 扩展执行似乎一直运行,直到后台任务完成
  • 或...

我的目标是能够运行此应用程序,它将启动库(swigged C#),它将在后台进行同步。用户可能会或可能不会直接使用该应用程序,因此应用程序可以最小化,由其他应用程序(如Web浏览器)覆盖(因此不会主动使用),但后台操作将每10分钟左右执行一次以进行同步。

根据我的阅读和迄今为止的一些很好的帮助,我正在努力找到一条安全的道路继续前进。这三个似乎是我正在看的。哪一个最适用我仍然不清楚。

有没有人处理过这样的场景,可以给出一些好的建议?

1 个答案:

答案 0 :(得分:1)

对于后台的文件下载/上传方案,您可以使用BackgroundDownloader / Uploader类: https://docs.microsoft.com/en-us/windows/uwp/networking/background-transfers

如果您需要在后台运行长时间运行的同步/维护应用程序代码任务,而用户实际上没有运行该应用程序,请使用MaintenanceTrigger。这将允许您运行最多10分钟,每15分钟一次。但是,当设备使用电池运行时,此任务将不会运行。 https://docs.microsoft.com/en-us/windows/uwp/launch-resume/use-a-maintenance-trigger

对于在您的应用未主动使用时在后台进行的简单同步任务,您可以使用TimeTrigger。这也可以在电池上运行,但每次运行的执行时间限制为30秒(可以每15分钟调度一次)。 https://docs.microsoft.com/en-us/windows/uwp/launch-resume/run-a-background-task-on-a-timer-

如果您的应用位于前台并运行同步活动,该活动应在应用最小化或屏幕锁定时继续,请使用ExtendedExecutionSession: https://docs.microsoft.com/en-us/windows/uwp/launch-resume/run-minimized-with-extended-execution

如果您的应用程序位于前台并且即使用户终止应用程序也应继续运行同步活动,请触发ApplicationTrigger后台任务以将活动卸载到后台任务: https://docs.microsoft.com/en-us/windows/uwp/launch-resume/trigger-background-task-from-app

如果需要从服务器端触发同步,请查看原始推送通知以在客户端上触发应用程序代码,即使用户未主动运行您的应用程序: https://docs.microsoft.com/en-us/windows/uwp/controls-and-patterns/tiles-and-notifications-raw-notification-overview

AppServices不是这里的解决方案。 AppService是一个应用程序到应用程序的概念,其中一个应用程序提供另一个应用程序消耗的服务。这似乎不是这种情况。顺便说一句,appservice的生命周期不是30秒 - 只要消费应用程序在前台,它就可以运行。但同样,这不适用于您的情况。