Я хочу выполнить некоторую задачу (в этом случае она будет уведомлять тосты), когда полученное событие завершено из фоновой задачи после получения уведомления о необработанном нажатии. Но у меня есть проблема:Не удается обработать завершенные фоновые задачи, когда приложение переходит на задний план
Когда приложение работает с отладкой, оно работает нормально, основной проект может обрабатывать завершенное событие из фоновой задачи и показывать уведомление о Toast, но когда я запускаю приложение без отладки и переходит в фоновый режим, он делает не работает, ничего не отображается после того, как приложение получает необработанное уведомление.
Вот мой код: В основном проекте, я зарегистрировал фоновую задачу:
private async void initBackgroundTask()
{
string myTaskName = "Ktask";
var status = await BackgroundExecutionManager.RequestAccessAsync();
// check if task is already registered
foreach (var cur in BackgroundTaskRegistration.AllTasks)
if (cur.Value.Name == myTaskName)
{
cur.Value.Unregister(true);
}
try
{
// register a new task
BackgroundTaskBuilder taskBuilder = new BackgroundTaskBuilder();
taskBuilder.Name = myTaskName;
taskBuilder.TaskEntryPoint = typeof(KBackgroundStuff.KBackgroundTask).ToString();
taskBuilder.SetTrigger(new PushNotificationTrigger());
//taskBuilder.SetTrigger(new TimeTrigger(15, false));
BackgroundTaskRegistration myFirstTask = taskBuilder.Register();
myFirstTask.Completed += new BackgroundTaskCompletedEventHandler(OnCompleted); ;
await (new MessageDialog("Task registered")).ShowAsync();
}
catch(Exception e)
{
Debug.WriteLine("trigger " + e.Message);
}
}
Handle Завершена событие с фоновой задачи:
private void OnCompleted(IBackgroundTaskRegistration task, BackgroundTaskCompletedEventArgs args)
{
// TODO: Add code that deals with background task completion.
ToastTemplateType toastTemplate = ToastTemplateType.ToastText02;
XmlDocument toastXml = ToastNotificationManager.GetTemplateContent(toastTemplate);
XmlNodeList textElements = toastXml.GetElementsByTagName("text");
textElements[0].AppendChild(toastXml.CreateTextNode("Notification - Yeah"));
textElements[1].AppendChild(toastXml.CreateTextNode("I'm message from your Notification!"));
ToastNotificationManager.CreateToastNotifier().Show(new ToastNotification(toastXml));
}
фона Задача:
public sealed class KBackgroundTask : IBackgroundTask
{
public void Run(IBackgroundTaskInstance taskInstance)
{
BackgroundTaskDeferral _deferral = taskInstance.GetDeferral();
RawNotification notification = (RawNotification)taskInstance.TriggerDetails;
string content = notification.Content;
System.Diagnostics.Debug.WriteLine(content);
_deferral.Complete();
}
}
Пожалуйста, помогите моему основному проекту получить завершенное событие из фона t спросите, когда приложение работает без отладки. Извините за мой английский
большое спасибо. В моем приложении я хочу, чтобы фоновая задача получила триггер push-уведомления, и он перезвонит в главный проект, чтобы зарегистрировать сокет. Так как я могу это сделать? – ThangBM
@ThangBM: Мы не можем возобновить фоновое задание формы заявки, когда оно было приостановлено. Для операций сокетов я предлагаю вам обратиться к [Сетевые коммуникации в фоновом режиме] (https://msdn.microsoft.com/en-us/windows/uwp/networking/network-communications-in-the-background). –
Zuo: У меня есть другой вопрос, связанный с фоновой задачей, если можете, пожалуйста, помогите мне ответить на него, спасибо. http://stackoverflow.com/questions/38066145/can-not-call-task-run-at-backgroundtask – ThangBM