如果应用程序正在启动,如何停止后台任务?

时间:2017-05-26 13:20:38

标签: c# uwp windows-10

在我的应用程序中,应用程序和后台任务都可以访问文件,无论先打开文件,另一个都会失败。

为了避免这种情况发生,我想在用户打开应用时停止后台任务,如果应用已经打开,则不要运行后台。

如果知道app是否正在运行,如何从后台任务中了解?以及如何在应用程序启动前停止它?感谢。

这是我注册后台任务的方式:

var result = await BackgroundExecutionManager.RequestAccessAsync();

var builder = new BackgroundTaskBuilder();
builder.Name = taskName;
builder.TaskEntryPoint = taskEntryPoint;
builder.SetTrigger(trigger);
builder.AddCondition(condition);

BackgroundTaskRegistration task = builder.Register();

UserNotPresent condition指定只有在用户不在时才能运行任务。但我现在不明白,这意味着用户正在使用该应用或使用手机。

1 个答案:

答案 0 :(得分:0)

UserNotPresent条件表示用户当前没有使用整个设备。

您的任务是进程内后台任务还是进程外后台任务? 我建议使用进程内任务来避免困难的跨进程通信场景并简化项目结构。

返回确定应用是否来自后台任务的实际问题:

对于进程内任务,您可以检查应用程序的可见性状态,以查看它是否在前台。这可以通过几种不同的方式完成:

  • 在LeavingBackground中将IsInForeground标志设置为true,然后在EnteredBackground中将其设置为false。然后,您可以检查该标记以查看该应用程序是否在前台。
  • 使用窗口的可见性。使用CoreWindow.GetForCurrentThread()。Visible或Window.Current.Visible将使您能够查看应用程序是否位于前台,最小化或在后台运行无头。两者在前景时都是真的,在最小化时是假的。 CoreWindow.GetForCurrentThread()将返回null并尝试访问Window.Current将在应用程序无头时抛出异常。

对于进程外任务,您可以与前台应用程序通信以确定它是否存在。这可以使用以下建议的方法之一来完成:Check if application is running from a background task

如何停止后台任务

确保释放后台任务实例的延迟,然后从主方法返回(Run()用于进程外或BackgroundActivated()用于进程内)。如果在此过程中没有其他任何内容正在运行,则它将退出。