c# - 如何处理 BackgroundTask.Completed 事件
问题描述
我正在开发一个 UWP 项目,最近我向它添加了一个进程外的后台任务。我在OnLaunched()
方法中注册任务App.cs
,以便仅在启动应用程序后运行任务。但是有一个问题:任务完成后我必须刷新我的 xaml 视图,我完全不知道如何实现(如果我将任务的注册移动到Main.xaml.cs
,它将在每次页面时运行打开)。我很乐意从你那里得到任何帮助。这是我StartBackgroundTask()
在方法中调用的OnLaunched()
方法:
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();
}
解决方案
您可以在 App.cs 上创建一个事件并在目标 XAML 页面中处理它。假设它是MainPage。然后您可以在注册后台任务后调用该事件。
这是一个非常简单的代码示例:
应用程序.cs
public static event Action<String> TaskCompleted;
public App()
{
this.InitializeComponent();
this.Suspending += OnSuspending;
}
protected override void OnLaunched(LaunchActivatedEventArgs e)
{
Frame rootFrame = Window.Current.Content as Frame;
//some other code
Window.Current.Activate();
}
App.TaskCompleted?.Invoke("Task Complete");
}
主页.cs
public MainPage()
{
this.InitializeComponent();
App.TaskCompleted += App_TaskCompleted;
}
private void App_TaskCompleted(string obj)
{
Debug.WriteLine(obj);
}
推荐阅读
- excel - 如何在 VBA excel 中的 If 语句中使用组合框值?
- python-3.x - python相关矩阵取消堆叠并打印所有值
- python - 将 dict 转换为期望它的列表 ansible podman 模块
- arrays - 给定数组中的索引确定组号
- vue.js - 如何从本地 JSON 文件获取数据到 Quasar 树节点
- rust - PathBuf::from(&some_other_pathbuf) 是否克隆了 some_other_pathbuf 的数据?
- javascript - 将 Stripe Client Intent Secret 传递给 Javascript
- java - R中的双边匹配(没有Java)
- r - 给列的数据相等的值除以 R 中系列中的平均值(平均值)数
- arrays - 将二叉树转换为存储在数组中