C# 如何处理背景任务。已完成事件
我正在从事一个UWP项目,最近我在其中添加了一个进程外的后台任务。我在C# 如何处理背景任务。已完成事件,c#,uwp,C#,Uwp,我正在从事一个UWP项目,最近我在其中添加了一个进程外的后台任务。我在App.cs中的OnLaunched()方法中注册该任务,以便该任务仅在应用程序启动后运行。但是有一个问题:我必须在任务完成后刷新我的xaml视图,我完全不知道如何实现它(如果我将任务的注册移动到Main.xaml.cs,它将在每次打开页面时运行)。 我很乐意得到你的任何帮助。 这是我的StartBackgroundTask()方法,我在OnLaunched()方法中调用它: private async void StartB
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
事件。当然,文档也有丰富的信息。如果在查看了这些可用的参考资料之后,您仍然有问题,请随意发布一个问题,其中包括一个适当的问题,以及该代码的详细解释,它与您想要的有什么不同,以及您具体需要哪些帮助。