Surveiller la progression et l’achèvement des tâches en arrière-plan
API importantes
Découvrez comment votre application peut reconnaître la progression et l’achèvement signalés par une tâche en arrière-plan qui s’exécute hors processus. (Pour les tâches en arrière-plan in-process, vous pouvez définir des variables partagées pour signaler la progression et l’achèvement.)
La progression et l’achèvement des tâches en arrière-plan peuvent être surveillés par le code de l’application. Pour ce faire, l’application s’abonne aux événements des tâches en arrière-plan qu’elle a inscrites auprès du système.
- Cette rubrique suppose que vous disposez d’une application qui inscrit les tâches en arrière-plan. Pour commencer rapidement à créer une tâche en arrière-plan, consultez Créer et inscrire une tâche en arrière-plan in-process ou Créer et inscrire une tâche en arrière-plan hors processus. Pour des informations plus détaillées sur les conditions et les déclencheurs, voir Définition de tâches en arrière-plan pour les besoins de votre application.
Créer un gestionnaire d’événements pour gérer les tâches en arrière-plan achevées
Étape 1
Créez une fonction de gestionnaire des événements pour gérer les tâches en arrière-plan achevées. Ce code doit suivre une empreinte spécifique, qui prend un objet IBackgroundTaskRegistration et un objet BackgroundTaskCompletedEventArgs .
Utilisez l’empreinte suivante pour la méthode de gestionnaire d’événements de tâche en arrière-plan OnCompleted .
private void OnCompleted(IBackgroundTaskRegistration task, BackgroundTaskCompletedEventArgs args)
{
// TODO: Add code that deals with background task completion.
}
auto completed{ [this](
Windows::ApplicationModel::Background::BackgroundTaskRegistration const& /* sender */,
Windows::ApplicationModel::Background::BackgroundTaskCompletedEventArgs const& /* args */)
{
// TODO: Add code that deals with background task completion.
} };
auto completed = [this](BackgroundTaskRegistration^ task, BackgroundTaskCompletedEventArgs^ args)
{
// TODO: Add code that deals with background task completion.
};
Étape 2
Ajoutez du code au gestionnaire des événements qui traite l’achèvement des tâches en arrière-plan.
Par exemple, l’exemple de tâche en arrière-plan met à jour l’interface utilisateur.
private void OnCompleted(IBackgroundTaskRegistration task, BackgroundTaskCompletedEventArgs args)
{
UpdateUI();
}
auto completed{ [this](
Windows::ApplicationModel::Background::BackgroundTaskRegistration const& /* sender */,
Windows::ApplicationModel::Background::BackgroundTaskCompletedEventArgs const& /* args */)
{
UpdateUI();
} };
auto completed = [this](BackgroundTaskRegistration^ task, BackgroundTaskCompletedEventArgs^ args)
{
UpdateUI();
};
Créer une fonction de gestionnaire des événements pour gérer la progression des tâches en arrière-plan
Étape 1
Créez une fonction de gestionnaire des événements pour gérer les tâches en arrière-plan achevées. Ce code doit suivre une empreinte spécifique, qui accepte un objet IBackgroundTaskRegistration et un objet BackgroundTaskProgressEventArgs :
Utilisez l’empreinte suivante pour la méthode de gestionnaire des événements de tâche en arrière-plan OnProgress :
private void OnProgress(IBackgroundTaskRegistration task, BackgroundTaskProgressEventArgs args)
{
// TODO: Add code that deals with background task progress.
}
auto progress{ [this](
Windows::ApplicationModel::Background::BackgroundTaskRegistration const& /* sender */,
Windows::ApplicationModel::Background::BackgroundTaskProgressEventArgs const& /* args */)
{
// TODO: Add code that deals with background task progress.
} };
auto progress = [this](BackgroundTaskRegistration^ task, BackgroundTaskProgressEventArgs^ args)
{
// TODO: Add code that deals with background task progress.
};
Étape 2
Ajoutez du code au gestionnaire des événements qui traite l’achèvement des tâches en arrière-plan.
Ainsi, l’exemple de tâche en arrière-plan met à jour l’interface utilisateur conformément à l’état de progression transmis avec le paramètre args :
private void OnProgress(IBackgroundTaskRegistration task, BackgroundTaskProgressEventArgs args)
{
var progress = "Progress: " + args.Progress + "%";
BackgroundTaskSample.SampleBackgroundTaskProgress = progress;
UpdateUI();
}
auto progress{ [this](
Windows::ApplicationModel::Background::BackgroundTaskRegistration const& /* sender */,
Windows::ApplicationModel::Background::BackgroundTaskProgressEventArgs const& args)
{
winrt::hstring progress{ L"Progress: " + winrt::to_hstring(args.Progress()) + L"%" };
BackgroundTaskSample::SampleBackgroundTaskProgress = progress;
UpdateUI();
} };
auto progress = [this](BackgroundTaskRegistration^ task, BackgroundTaskProgressEventArgs^ args)
{
auto progress = "Progress: " + args->Progress + "%";
BackgroundTaskSample::SampleBackgroundTaskProgress = progress;
UpdateUI();
};
Inscrire les fonctions de gestionnaire d’événements auprès des tâches en arrière-plan nouvelles et existantes
Étape 1
Lorsque l’application inscrit une tâche en arrière-plan pour la première fois, elle doit s’inscrire pour recevoir les mises à jour de progression et d’achèvement de la tâche au cas où celle-ci s’exécuterait pendant que l’application est toujours active au premier plan.
Ainsi, l’exemple de tâche en arrière-plan appelle la fonction suivante pour chaque tâche en arrière-plan qu’il inscrit :
private void AttachProgressAndCompletedHandlers(IBackgroundTaskRegistration task)
{
task.Progress += new BackgroundTaskProgressEventHandler(OnProgress);
task.Completed += new BackgroundTaskCompletedEventHandler(OnCompleted);
}
void SampleBackgroundTask::AttachProgressAndCompletedHandlers(Windows::ApplicationModel::Background::IBackgroundTaskRegistration const& task)
{
auto progress{ [this](
Windows::ApplicationModel::Background::BackgroundTaskRegistration const& /* sender */,
Windows::ApplicationModel::Background::BackgroundTaskProgressEventArgs const& args)
{
winrt::hstring progress{ L"Progress: " + winrt::to_hstring(args.Progress()) + L"%" };
BackgroundTaskSample::SampleBackgroundTaskProgress = progress;
UpdateUI();
} };
task.Progress(progress);
auto completed{ [this](
Windows::ApplicationModel::Background::BackgroundTaskRegistration const& /* sender */,
Windows::ApplicationModel::Background::BackgroundTaskCompletedEventArgs const& /* args */)
{
UpdateUI();
} };
task.Completed(completed);
}
void SampleBackgroundTask::AttachProgressAndCompletedHandlers(IBackgroundTaskRegistration^ task)
{
auto progress = [this](BackgroundTaskRegistration^ task, BackgroundTaskProgressEventArgs^ args)
{
auto progress = "Progress: " + args->Progress + "%";
BackgroundTaskSample::SampleBackgroundTaskProgress = progress;
UpdateUI();
};
task->Progress += ref new BackgroundTaskProgressEventHandler(progress);
auto completed = [this](BackgroundTaskRegistration^ task, BackgroundTaskCompletedEventArgs^ args)
{
UpdateUI();
};
task->Completed += ref new BackgroundTaskCompletedEventHandler(completed);
}
Étape 2
Lorsque l’application se lance ou accède à une nouvelle page dans laquelle l’état des tâches en arrière-plan est important, elle doit obtenir la liste des tâches en arrière-plan actuellement inscrites et les associer aux fonctions de gestionnaire des événements de progression et d’achèvement. Cette liste est conservée dans la propriété BackgroundTaskRegistration.AllTasks.
Ainsi, l’exemple de tâche en arrière-plan utilise le code suivant pour joindre les gestionnaires d’événements lorsque vous accédez à la page SampleBackgroundTask :
protected override void OnNavigatedTo(NavigationEventArgs e)
{
foreach (var task in BackgroundTaskRegistration.AllTasks)
{
if (task.Value.Name == BackgroundTaskSample.SampleBackgroundTaskName)
{
AttachProgressAndCompletedHandlers(task.Value);
BackgroundTaskSample.UpdateBackgroundTaskStatus(BackgroundTaskSample.SampleBackgroundTaskName, true);
}
}
UpdateUI();
}
void SampleBackgroundTask::OnNavigatedTo(Windows::UI::Xaml::Navigation::NavigationEventArgs const& /* e */)
{
// A pointer back to the main page. This is needed if you want to call methods in MainPage such
// as NotifyUser().
m_rootPage = MainPage::Current;
// Attach progress and completed handlers to any existing tasks.
auto allTasks{ Windows::ApplicationModel::Background::BackgroundTaskRegistration::AllTasks() };
for (auto const& task : allTasks)
{
if (task.Value().Name() == SampleBackgroundTaskName)
{
AttachProgressAndCompletedHandlers(task.Value());
break;
}
}
UpdateUI();
}
void SampleBackgroundTask::OnNavigatedTo(NavigationEventArgs^ e)
{
// A pointer back to the main page. This is needed if you want to call methods in MainPage such
// as NotifyUser().
rootPage = MainPage::Current;
// Attach progress and completed handlers to any existing tasks.
auto iter = BackgroundTaskRegistration::AllTasks->First();
auto hascur = iter->HasCurrent;
while (hascur)
{
auto cur = iter->Current->Value;
if (cur->Name == SampleBackgroundTaskName)
{
AttachProgressAndCompletedHandlers(cur);
break;
}
hascur = iter->MoveNext();
}
UpdateUI();
}
Rubriques connexes
- Créez et inscrivez une tâche en arrière-plan in-process.
- Créer et inscrire une tâche en arrière-plan hors processus
- Déclarer des tâches en arrière-plan dans le manifeste de l’application
- Gérer une tâche en arrière-plan annulée
- Inscrire une tâche en arrière-plan
- Répondre aux événements système avec des tâches en arrière-plan
- Définir des conditions pour l’exécution d’une tâche en arrière-plan
- Mettre à jour une vignette dynamique à partir d’une tâche en arrière-plan
- Utiliser un déclencheur de maintenance
- Exécuter une tâche en arrière-plan en fonction d’un minuteur
- Recommandations relatives aux tâches en arrière-plan
- Déboguer une tâche en arrière-plan
- Comment déclencher des événements de suspension, de reprise et d’arrière-plan dans les applications UWP (lors du débogage)
Commentaires
https://aka.ms/ContentUserFeedback.
Bientôt disponible : Tout au long de 2024, nous allons supprimer progressivement GitHub Issues comme mécanisme de commentaires pour le contenu et le remplacer par un nouveau système de commentaires. Pour plus d’informations, consultezEnvoyer et afficher des commentaires pour