Uwp 当应用程序转到后台时,无法处理已完成的后台任务

Uwp 当应用程序转到后台时,无法处理已完成的后台任务,uwp,windows-10-mobile,background-task,Uwp,Windows 10 Mobile,Background Task,在收到原始推送通知后,当从后台任务接收到已完成事件时,我想执行一些任务(在本例中,它显示toast通知)。但我有一个问题: 当应用程序带调试运行时,它工作正常,主项目可以处理来自后台任务的已完成事件并显示Toast通知,但当我不带调试运行应用程序并转到后台时,它不工作,在应用程序收到原始通知后将不显示任何内容 这是我的密码: 在main project中,我注册了一个后台任务: private async void initBackgroundTask() { 字符串myTaskName=“Kt

在收到原始推送通知后,当从后台任务接收到已完成事件时,我想执行一些任务(在本例中,它显示toast通知)。但我有一个问题:

当应用程序带调试运行时,它工作正常,主项目可以处理来自后台任务的已完成事件并显示Toast通知,但当我不带调试运行应用程序并转到后台时,它不工作,在应用程序收到原始通知后将不显示任何内容

这是我的密码: 在main project中,我注册了一个后台任务:

private async void initBackgroundTask()
{
字符串myTaskName=“Ktask”;
var status=await BackgroundExecutionManager.RequestAccessAsync();
//检查任务是否已注册
foreach(BackgroundTaskRegistration.AllTasks中的var cur)
if(cur.Value.Name==myTaskName)
{                    
当前值取消注册(true);
}
尝试
{
//注册新任务
BackgroundTaskBuilder taskBuilder=新建BackgroundTaskBuilder();
taskBuilder.Name=myTaskName;
taskBuilder.TaskEntryPoint=typeof(KBackgroundStuff.KBackgroundTask.ToString();
SetTrigger(新的PushNotificationTrigger());
//taskBuilder.SetTrigger(新的TimeTrigger(15,false));
BackgroundTaskRegistration myFirstTask=taskBuilder.Register();
myFirstTask.Completed+=新的BackgroundTaskCompletedEventHandler(未完成);
wait(新建消息对话框(“任务已注册”)).ShowAsync();
}
捕获(例外e)
{
Debug.WriteLine(“触发器”+e.Message);
}            
}
从后台任务处理已完成的事件:

private void未完成(IBackgroundTaskRegistration任务、BackgroundTaskCompletedEventArgs args args)
{
//TODO:添加处理后台任务完成的代码。
ToastTemplateType toastTemplate=ToastTemplateType.ToastText02;
XmlDocument toastXml=ToastNotificationManager.GetTemplateContent(toastTemplate);
XmlNodeList textElements=toastXml.GetElementsByTagName(“文本”);
textElements[0].AppendChild(toastXml.CreateTextNode(“通知-是”);
textElements[1].AppendChild(toastXml.CreateTextNode(“我是来自您通知的消息!”);
ToastNotificationManager.CreateToastNotifier().Show(新的ToastNotification(toastXml));
}
背景任务:

公共密封类KBackgroundTask:IBackgroundTask
{
公共无效运行(IBackgroundTaskInstance taskInstance)
{
BackgroundTaskDeleral _deleral=taskInstance.getDeleral();
RawNotification notification=(RawNotification)taskInstance.TriggerDetails;
字符串内容=notification.content;
系统.诊断.调试.写入线(内容);
_延迟。完成();
}
}

请帮助我的主项目在没有调试的情况下运行应用程序时可以从后台任务接收已完成的事件。对不起,我的英语不好

当您的应用程序转到后台时,toast通知不应该显示。在代码中,您正在发送toast通知以处理后台任务的完成事件。然而,在的评论中声明:

只有在应用程序处于前台时任务完成时,才会传递完成事件。如果应用程序被挂起然后终止,则完成状态不被传递。如果申请被暂停,然后恢复,则保证收到完成通知

当您的应用程序转到后台时,它将被挂起,因此您将不会看到toast通知

当应用程序通过调试运行时,它工作正常,主项目可以处理来自后台任务的已完成事件并显示Toast通知

这是因为在使用Visual Studio进行调试时,Visual Studio会阻止Windows挂起连接到调试器的应用程序。这允许用户在应用程序运行时查看Visual Studio调试UI。


因此,在调试时,应用程序实际上总是在前台运行。有关更多信息,请参阅。

非常感谢。在我的应用程序中,我想知道后台任务何时收到推送通知触发器,它将回调主项目以注册套接字,那么我如何才能做到这一点?@ThangBM:当应用程序窗体后台任务被挂起时,我们无法恢复它。对于套接字操作,我建议您参考。左:我还有一个关于后台任务的问题,如果可以,请帮助我回答,谢谢。