mal*_*loo 4 windows service uwp
我的任务是将一个LOB桌面应用程序从.NET 4.5.2移植到Windows 10 UWP.在正常的Win32应用程序中,应用程序会运行,直到用户关闭应用程序(服务和应用程序).但在阅读UWP应用程序时,我发现所有文档都说没有办法阻止应用程序暂停(只是临时或超过配额).我在移动设备/平板电脑上理解这一点,但在具有性能和功率的台式机上却没有.
这个问题的一个常见答案是使用"真实"服务器(通常是Web服务器).但我们的应用程序用于没有互联网的领域.所以我们需要服务器/服务在台式机上运行.
到目前为止,我找到的最佳选择是一个UWP应用程序,内置后台任务要求延期.但据我所知,这仍然无法保证暂停.只有一些模糊的信息"你可能不会被暂停,因为它是一台在全球池中拥有大量资源的台式机"......
我不喜欢将.NET中的LOB服务应用程序和UWP中的客户端保留在一起,因为它们共享许多无法在.NET和UWP之间重用的代码.
那么,任何有明确答案/参考的人都可以阻止在Win10台式机上运行的服务式UWP应用/任务暂停?
类似的用户声音在wpdev.uservoice.com上已经提出了,其中Microsoft正在收听建议.我们强烈建议您对其进行投票,添加您的评论并对其进行监控.
我认为防止暂停与否应该由用户决定,但是没有办法做到这一点.我同意,在某些特殊情况下,它是有道理的.
但目前UWP的应用程序生命周期对于暂停状态非常清楚.在桌面系列上,UWP应用程序在最小化或Windows进入低功耗状态时暂停.
[ 更新 ]
您可能不知道的另一种可能的解决方案是Windows 10中引入的新功能 - 扩展执行会话.
目前没有关于此功能的官方样本,但您可以查看Jerry Nixon和Andy Wigley关于应用程序生命周期的MVA会话(#13).而在这里是Q&A为该会话,你可以找到一个示例代码记录.您可以下载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(); }
}
}
Run Code Online (Sandbox Code Playgroud)
但正如杰瑞所说,仍然无法保证 100%可靠.
| 归档时间: |
|
| 查看次数: |
2827 次 |
| 最近记录: |