【发布时间】:2021-04-21 14:22:16
【问题描述】:
我正在处理一个 UWP 项目,最近我向它添加了一个进程外后台任务。我在App.cs 的OnLaunched() 方法中注册了任务,以便仅在启动应用程序后运行任务。但是有一个问题:任务完成后我必须刷新我的xaml视图,我完全不知道如何实现(如果我将任务的注册移动到Main.xaml.cs,它将每次运行页面打开)。
我很乐意从你那里得到任何帮助。
这是我在OnLaunched() 方法中调用的StartBackgroundTask() 方法:
private async void StartBackgroundTask()
{
var task = BackgroundTaskRegistration.AllTasks.Values.FirstOrDefault(x => x.Name == "testTask");
if (task != null)
{
task.Unregister(true);
}
var taskBuilder = new BackgroundTaskBuilder();
taskBuilder.Name = "testTask";
taskBuilder.TaskEntryPoint = typeof(UpdateLocalDbBackgroundTask.UpdateLocalDbBackgroundTask).ToString();
ApplicationTrigger trigger = new ApplicationTrigger();
taskBuilder.SetTrigger(trigger);
taskBuilder.AddCondition(new SystemCondition(SystemConditionType.InternetAvailable));
task = taskBuilder.Register();
await trigger.RequestAsync();
}
【问题讨论】:
-
可能不是你要找的东西,所以我不会把它作为答案,但你可以在你的项目中添加一个公共静态布尔值并将其设置为 true默认。然后在注册任务之前,检查 bool 是否为真(默认情况下在启动时为真)。一旦你注册了你的任务,就将它设置为 false,这样它就不会再运行了。全局类/变量使用示例:social.msdn.microsoft.com/Forums/windowsapps/en-US/…
-
我喜欢这个主意,例如,您也可以使用
ApplicationData.Current.LocalSettings.Values字典,然后在MainPage上使用异步方法检查您在完成后设置的值是否有变化App.cs中的更新方法。 -
关于如何正确使用
BackgroundWorker的详细信息可以在重复问题的答案中找到,包括如何使用处理程序订阅RunWorkerCompleted事件。当然,文档也有丰富的信息。如果在查看了这些可用的参考资料后您仍然有问题,请随时发布一个问题,其中包括正确的minimal reproducible example,并详细说明该代码的作用、与您想要的有何不同以及具体 你需要帮助。