首页 > 解决方案 > 如何处理 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();
    }

标签: c#uwp

解决方案


您可以在 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);
    }

推荐阅读