#c# #uwp
#c# #uwp
Вопрос:
Я пытаюсь использовать новые API-интерфейсы «Фоновая активность с использованием модели единого процесса» для поддержки моего приложения с фоновой задачей. Но я получаю сообщение «не найдено подходящего метода для переопределения» в методе «OnBackgroundActivated». Что не так с моим кодом?
public MainPage()
{
this.InitializeComponent();
Application.Current.EnteredBackground = Current_EnteredBackground;
}
private async void Current_EnteredBackground(object sender, Windows.ApplicationModel.EnteredBackgroundEventArgs e)
{
await RegisterBackgroundTask();
}
protected override void OnBackgroundActivated(BackgroundActivatedEventArgs args)
{
// show a toast
}
private void Page_Loaded(object sender, RoutedEventArgs e)
{
}
private async Task RegisterBackgroundTask()
{
BackgroundAccessStatus backgroundAccessStatus = await BackgroundExecutionManager.RequestAccessAsync();
if (backgroundAccessStatus == BackgroundAccessStatus.AllowedSubjectToSystemPolicy ||
backgroundAccessStatus == BackgroundAccessStatus.AlwaysAllowed)
{
foreach (var bgTask in BackgroundTaskRegistration.AllTasks)
{
if (bgTask.Value.Name == "MyTask")
{
bgTask.Value.Unregister(true);
}
}
var builder = new BackgroundTaskBuilder();
builder.Name = "MyTask";
builder.SetTrigger(new TimeTrigger(15, false));
// use builder.TaskEntryPoint if you want to not use the default OnBackgroundActivated
// we’ll register it and now will start work based on the trigger, here we used a Time Trigger
BackgroundTaskRegistration task = builder.Register();
}
}
Ответ №1:
Проблема здесь в том, что вы пытаетесь переопределить OnBackgroundActivated
метод в MainPage
классе. MainPage
класс является производным от класса страницы, но Application .Метод OnBackgroundActivated — это метод класса приложения, который не существует в Page
классе, поэтому вы получили no suitable method found to override
ошибку.
Чтобы исправить эту проблему, нам нужно поместить OnBackgroundActivated
метод в App
класс, например:
sealed partial class App : Application
{
/// <summary>
/// Override the Application.OnBackgroundActivated method to handle background activation in
/// the main process. This entry point is used when BackgroundTaskBuilder.TaskEntryPoint is
/// not set during background task registration.
/// </summary>
/// <param name="args"></param>
protected override void OnBackgroundActivated(BackgroundActivatedEventArgs args)
{
//TODO
}
}
Для получения дополнительной информации о фоновой задаче одного процесса см. раздел Поддержка вашего приложения фоновыми задачами и фоновой активностью с помощью модели единого процесса.
Комментарии:
1. Спасибо, это работает. Никогда не думал об этом. Я очень новичок в программировании, поэтому это немного сложно понять. Спасибо!