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

SWIG - C# Calling from UWP Background Task or Extended Execution

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

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

我最近一直在做很多关于 UWP 应用程序的后台激活和前台激活的主题 reading/research。到目前为止,我发现:

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

根据我的阅读和目前获得的一些重要帮助,我正在努力寻找一条安全的道路继续前进。这3个似乎就是我正在看的。哪一个最适用我还不清楚。

有没有人处理过这样的情况,可以提供一些好的建议?

对于后台文件download/upload的场景可以使用BackgroundDownloader/Uploader类: https://docs.microsoft.com/en-us/windows/uwp/networking/background-transfers

如果您需要在后台 运行 长时间 运行 宁 sync/maintenance 应用程序代码任务,而不需要用户实际 运行 应用程序,请使用 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-

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

如果您的应用程序在前台,并且 运行即使用户终止应用程序,同步 activity 也应该继续,触发 ApplicationTrigger 后台任务以卸载 activity后台任务: 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 秒——只要消费应用程序在前台,它就可以 运行。但这同样不适用于您的场景。