是否有可能阻止在LOB UWP桌面应用程序/后台任务中挂起?

我一直负责将.NET 4.5.2的LOB桌面应用程序移植到Windows 10 UWP。 在正常的Win32应用程序中运行一个应用程序,直到用户closures应用程序(服务和应用程序)。 但是,当阅读UWP应用程序的所有文档时,我发现无法阻止应用程序暂停(只有暂时的或超出配额的情况)。 我在移动/平板电脑上了解这一点,但不能在具有性能和功耗的台式机上使用。

这个问题的一个常见的答案是使用“真实”的服务器(通常是一个Web服务器)。 但我们的应用程序是用于互联网不可用的领域。 所以我们需要服务器/服务在台式机上运行。

到目前为止,我发现最好的select是内置后台任务的UWP应用程序要求延期。 但据我了解,这暂停还没有提供保证。 只有一些模糊的信息,“你可能不会被暂停,因为它是一个在全局池中有大量资源的桌面机器”…

我不喜欢在.NET和UWP中保留LOB服务应用程序,因为它们共享了很多不能在.NET和UWP之间重用的代码。

那么,任何得到肯定回答/参考的人都有可能阻止在Win10桌面机上运行UWP应用程序/任务的服务风格挂起?

在微软正在听取建议的wpdev.uservoice.com上提出了类似的uservoice 。 强烈建议您对此进行投票,添加您的意见并对其进行监控。

我相信防止暂停或不应该由用户决定,但是没有办法做到这一点。 我同意,在一些特殊情况下,这是有道理的。

但是目前UWP的应用程序生命周期对于暂停状态是非常清楚的。 在桌面族中,UWP应用程序在最小化或Windows进入低功耗状态时会挂起。

[ 更新 ]

您可能还不知道的另一个可能的解决方案是Windows 10 – 扩展执行会话中引入的新功能。

目前还没有关于此功能的官方示例,但您可以查看Jerry Nixon和Andy Wigley关于应用程序生命周期的MVA会话 (#13)。 这里是你可以找到示例代码的那个会话的问答记录。 您可以下载MVA会议中包含的ppt,其中包含以下代码供您快速参考:

private async void OnSuspending(object sender, SuspendingEventArgs args) { var deferral = e.SuspendingOperation.GetDeferral(); using (var session = new ExtendedExecutionSession { Reason = ExtendedExecutionReason.SavingData }) { session.Description = "Upload Data"; session.Revoked += (s, e) => { Log("Save incomplete"); }; try { if (await session.RequestExtensionAsync() == ExtendedExecutionResult.Denied) // takes 3 seconds UploadBasicData(); else // takes 8 seconds await UploadDataAsync(session); Log("Save complete"); } catch { Log("Save failed"); } finally { deferral.Complete(); } } } 

但正如杰里所说,仍然不能保证它是100%可靠的。

更新:已经为LOB应用程序创建了特定于企业的功能,可以根据需要运行,以下是有关这些功能的信息: https : //docs.microsoft.com/en-us/windows/uwp/launch-resume/run-in -the-背景indefinetly

Clint的UserVoice中的答案适用于所有针对消费者Microsoft Store的应用程序:

在Windows 10周年更新(内部版本14393)中,我们更新了Extended Execution Unspecified Reason,使其能够识别PC设备系列的电池。 这是要求在前台,如果该设备连接到交流电源,或者如果它有一个电池,但用户设置“始终允许”在电池使用设置,那么该应用程序将能够运行没有时间限制。 这适用于单一进程模型,因为扩展执行不适用于后台任务。 BackgroundMediaPlayback功能在某些情况下也不会被暂停。 我们保持这个开放,因为我们可以做更多。 如果您有情况,我们不能很好地与更新的模型,请告诉我们!

因此,前景应用程序可以使用未指定的扩展执行未指定的电池设置,扩展的执行位置跟踪或BackgroundMediaPlayback功能,根据您所需的场景进行挂起。 从您的描述中,听起来像未指定扩展执行选项将是最相关的选项。 以下是示例代码的链接: https : //github.com/Microsoft/Windows-universal-samples/tree/master/Samples/ExtendedExecution

我认为你最好的选择应该是应用程序服务,这是Windows 10的新功能。从Microsoft MVA: http : //www.microsoftvirtualacademy.com/training-courses/a-developers-guide-to-windows-10,note :这个链接有点过时,但是信息依然有效。 您可能想要查找相同内容的更新版本。

基本上,应用程序服务就像Web服务,可以由其他应用程序使用。 注意其生命周期。 在我看来,它的生命周期与Windows服务类似,但仔细检查。