Активирован UWP onbackground, не найдено подходящего метода для переопределения

#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. Спасибо, это работает. Никогда не думал об этом. Я очень новичок в программировании, поэтому это немного сложно понять. Спасибо!