C# 如何处理背景任务。已完成事件

C# 如何处理背景任务。已完成事件,c#,uwp,C#,Uwp,我正在从事一个UWP项目,最近我在其中添加了一个进程外的后台任务。我在App.cs中的OnLaunched()方法中注册该任务,以便该任务仅在应用程序启动后运行。但是有一个问题:我必须在任务完成后刷新我的xaml视图,我完全不知道如何实现它(如果我将任务的注册移动到Main.xaml.cs,它将在每次打开页面时运行)。 我很乐意得到你的任何帮助。 这是我的StartBackgroundTask()方法,我在OnLaunched()方法中调用它: private async void StartB

我正在从事一个UWP项目,最近我在其中添加了一个进程外的后台任务。我在
App.cs
中的
OnLaunched()
方法中注册该任务,以便该任务仅在应用程序启动后运行。但是有一个问题:我必须在任务完成后刷新我的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页面中处理它。假设它是主页。然后,您可以在注册后台任务后调用该事件

下面是一个非常简单的代码示例:

App.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");

    }
    public MainPage()
    {
        this.InitializeComponent();

        App.TaskCompleted += App_TaskCompleted;
    }

    private void App_TaskCompleted(string obj)
    {
        Debug.WriteLine(obj);
    }

可能不是您想要的,所以我不会把它作为一个答案,但您可以在项目中的类中添加一个公共静态bool,并在默认情况下将其设置为true。然后在注册任务之前,检查bool是否为true(启动时默认为true)。一旦您注册了一次任务,就将其设置为false,这样它就不会再次运行。全局类/变量用法示例:我喜欢这个想法,例如,您也可以使用
ApplicationData.Current.LocalSettings.Values
字典,然后在
主页上使用异步方法检查在
App.cs
中使用更新方法时设置的值是否有变化。有关如何正确使用
BackgroundWorker
的详细信息,请参阅重复问题的答案,包括如何使用处理程序订阅
RunWorkerCompleted
事件。当然,文档也有丰富的信息。如果在查看了这些可用的参考资料之后,您仍然有问题,请随意发布一个问题,其中包括一个适当的问题,以及该代码的详细解释,它与您想要的有什么不同,以及您具体需要哪些帮助。