当我在打开设备后立即登录时,我正在尝试运行我的后台任务。现在它仅在我已经登录并重新登录时运行。
调试的时候看到task注册的很完美,不知道为什么启动的时候还不行。
async void RequestBackgroundAccess()
{
BackgroundAccessStatus backgroundStatus = await BackgroundExecutionManager.RequestAccessAsync();
if (backgroundStatus != BackgroundAccessStatus.Denied && backgroundStatus != BackgroundAccessStatus.Unspecified)
{
RegisterBackgroundThread();
}
else
{
Debug.WriteLine("[Background Access] Denied.");
}
}
void RegisterBackgroundThread()
{
var taskRegistered = false;
var exampleTaskName = "Bot";
foreach (var bgTask in BackgroundTaskRegistration.AllTasks)
{
if (bgTask.Value.Name == exampleTaskName)
{
taskRegistered = true;
Debug.WriteLine("[Background Task] Registered.");
break;
}
}
if (taskRegistered == false)
{
Debug.WriteLine("[Background Task] Registering...");
var builder = new BackgroundTaskBuilder();
builder.Name = exampleTaskName;
builder.TaskEntryPoint = "Tasks.Bot";
builder.SetTrigger(new SystemTrigger(SystemTriggerType.UserPresent, false));
BackgroundTaskRegistration task = builder.Register();
Debug.WriteLine("[Background Task] Registered.");
}
}
机器人.cs
namespace Tasks
{
public sealed class Bot : IBackgroundTask
{
BackgroundTaskDeferral serviceDeferral;
public void Run(IBackgroundTaskInstance taskInstance)
{
this.serviceDeferral = taskInstance.GetDeferral();
ToastNotification("Starting...");
}
void ToastNotification(String message)
{
XmlDocument toastXml = ToastNotificationManager.GetTemplateContent(ToastTemplateType.ToastText01);
XmlNodeList stringElements = toastXml.GetElementsByTagName("text");
stringElements[0].AppendChild(toastXml.CreateTextNode(message));
ToastNotification toast = new ToastNotification(toastXml);
ToastNotificationManager.CreateToastNotifier().Show(toast);
}
}
}
最佳答案
我注销后台任务并重新注册,它解决了我遇到的问题。
关于c# - 启动时运行后台任务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35108010/