Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
viktiga API:er
Lär dig hur din app kan känna igen framsteg och slutförande som rapporteras av en bakgrundsaktivitet som körs utanför processen. (För pågående bakgrundsaktiviteter kan du ange delade variabler för att ange förlopp och slutförande.)
Förlopp och slutförande av bakgrundsaktiviteter kan övervakas med appkod. För att göra det prenumererar appen på händelser från de bakgrundsaktiviteter som den har registrerat med systemet.
- Det här avsnittet förutsätter att du har en app som registrerar bakgrundsaktiviteter. Information om hur du snabbt kommer igång med att skapa en bakgrundsaktivitet finns i Skapa och registrera en pågående bakgrundsaktivitet eller Skapa och registrera en bakgrundsaktivitet som inte är bearbetad. För mer detaljerad information om villkor och utlösare, se Stöd din app med bakgrundsuppgifter.
Skapa en händelsehanterare för att hantera slutförda bakgrundsuppgifter
Steg 1
Skapa en händelsehanterarfunktion för att hantera slutförda bakgrundsaktiviteter. Den här koden måste följa en specifik struktur som tar ett IBackgroundTaskRegistration-objekt och ett BackgroundTaskCompletedEventArgs-objekt.
Använd följande mall för metodhanteraren för bakgrundsaktivitetshändelsen 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.
};
Steg 2
Lägg till kod i händelsehanteraren som hanterar slutförandet av bakgrundsaktiviteten.
Exempel på bakgrundsaktivitet uppdaterar användargränssnittet.
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();
};
Skapa en händelsehanterarfunktion för att hantera bakgrundsaktivitetens förlopp
Steg 1
Skapa en händelsehanterarfunktion för att hantera slutförda bakgrundsaktiviteter. Den här koden måste följa en specifik struktur som tar in ett IBackgroundTaskRegistration-objekt och ett BackgroundTaskProgressEventArgs-objekt:
Använd följande signatur för händelsehanterarmetoden för bakgrundsuppgifter i 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.
};
Steg 2
Lägg till kod i händelsehanteraren som hanterar slutförandet av bakgrundsaktiviteten.
Exempel på bakgrundsaktivitet uppdaterar användargränssnittet med statusen för förlopp som skickas via parametern 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();
};
Registrera händelsehanterarfunktionerna med nya och befintliga bakgrundsaktiviteter
Steg 1
När appen registrerar en bakgrundsaktivitet för första gången bör den registrera sig för att ta emot förlopps- och slutförandeuppdateringar för den, om aktiviteten körs medan appen fortfarande är aktiv i förgrunden.
Exempel på bakgrundsaktivitet anropar till exempel följande funktion för varje bakgrundsaktivitet som registreras:
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);
}
Steg 2
När appen startas eller navigerar till en ny sida där status för bakgrundsaktivitet är relevant bör den hämta en lista över bakgrundsaktiviteter som för närvarande är registrerade och associera dem med förlopps- och slutförandehändelsehanterarfunktionerna. Listan över bakgrundsaktiviteter som för närvarande registreras av programmet finns i BackgroundTaskRegistration.AllTasks-egenskapen.
Exempel på bakgrundsaktivitet använder följande kod för att koppla händelsehanterare när sidan SampleBackgroundTask navigeras till:
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();
}
Relaterade ämnen
- Skapa och registrera en pågående bakgrundsaktivitet.
- Skapa och registrera en bakgrundsaktivitet som körs utanför processen
- Deklarera bakgrundsaktiviteter i programmanifestet
- Hantera en avbruten bakgrundsaktivitet
- Registrera en bakgrundsaktivitet
- Svara på systemhändelser med bakgrundsaktiviteter
- Ange villkor för att köra en bakgrundsaktivitet
- Uppdatera en levande panel från en bakgrundsprocess
- Använd en underhållsutlösare
- Kör en bakgrundsaktivitet på en timer-
- Riktlinjer för bakgrundsaktiviteter
- Felsöka en bakgrundsaktivitet
- Så här utlöser du paus-, återuppta- och bakgrundshändelser i UWP-appar (vid felsökning)