Poznámka
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
důležitá rozhraní API
Zjistěte, jak vaše aplikace dokáže rozpoznat průběh a dokončení hlášené úlohou na pozadí, která běží mimo proces. (U úloh na pozadí v procesu můžete nastavit sdílené proměnné, které označují průběh a dokončení.)
Průběh a dokončení úlohy na pozadí je možné monitorovat pomocí kódu aplikace. K tomu se aplikace přihlásí k odběru událostí z úloh na pozadí, které zaregistrovala v systému.
- V tomto tématu se předpokládá, že máte aplikaci, která registruje úlohy na pozadí. Pokud chcete rychle začít vytvářet úlohu na pozadí, přečtěte si téma Vytvoření a registrace úlohy na pozadí procesu nebo Vytvoření a registrace úlohy na pozadí mimo proces. Podrobnější informace o podmínkách a triggerech najdete v tématu Podpora aplikace pomocí úloh na pozadí.
Vytvořte obslužnou rutinu události pro zpracování dokončených úloh na pozadí
Krok 1
Vytvořte obslužnou funkci pro obsluhu dokončených úloh na pozadí. Tento kód musí dodržovat konkrétní formát, který vyžaduje objekt IBackgroundTaskRegistration a objekt BackgroundTaskCompletedEventArgs.
Použijte následující stopu pro OnCompleted metodu obslužné rutiny události úlohy na pozadí.
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.
};
Krok 2
Přidejte kód do obslužné rutiny události, která se zabývá dokončením úlohy na pozadí.
Například vzor úlohy na pozadí aktualizuje uživatelské rozhraní.
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();
};
Vytvořit funkci obslužné rutiny události pro sledování postupu úkolu na pozadí
Krok 1
Vytvořte obslužnou funkci pro obsluhu dokončených úloh na pozadí. Tento kód musí dodržovat specifický vzor, který přijímá objekt IBackgroundTaskRegistration a objekt BackgroundTaskProgressEventArgs:
Pro metodu obslužné rutiny události na pozadí OnProgress použijte následující stopu:
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.
};
Krok 2
Přidejte kód do obslužné rutiny události, která se zabývá dokončením úlohy na pozadí.
Například ukázka úlohy na pozadí aktualizuje uživatelské rozhraní o stav průběhu předaný prostřednictvím parametru 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();
};
Zaregistrujte funkce obslužné rutiny událostí pro nové a stávající úlohy na pozadí.
Krok 1
Když aplikace poprvé zaregistruje úlohu na pozadí, měla by se pro ni zaregistrovat, aby dostávala informace o průběhu a dokončení, pokud se úloha spustí, i když je aplikace stále aktivní v popředí.
Například příklad úlohy na pozadí volá následující funkci pro každou úlohu na pozadí, kterou registruje:
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);
}
Krok 2
Když se aplikace spustí nebo přejde na novou stránku, na které je relevantní stav úlohy na pozadí, měl by se zobrazit seznam úloh na pozadí, které jsou aktuálně zaregistrovány, a přidružit je k funkcím obslužné rutiny událostí průběhu a dokončení. Seznam úloh na pozadí, které jsou aktuálně zaregistrovány aplikací, je uložen ve vlastnosti BackgroundTaskRegistration.AllTasks.
Příklad úlohy na pozadí používá následující kód pro připojení obslužných rutin událostí při navigaci na stránku 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();
}
Související témata
- Vytvoření a registrace úlohy na pozadí v rámci procesů.
- Vytvoření a registrace úlohy na pozadí, která běží mimo proces
- Deklarovat úlohy na pozadí v manifestu aplikace
- Vyřešte zrušený úkol na pozadí
- Zaregistrujte úlohu na pozadí
- Reakce na systémové události pomocí úloh na pozadí
- Nastavit podmínky pro spuštění úlohy na pozadí
- Aktualizace živé dlaždice prostřednictvím úlohy na pozadí
- Použijte spouštěč údržby
- Spusťte úlohu na pozadí pomocí časovače
- Pokyny pro úlohy na pozadí
- Ladění úlohy na pozadí
- Jak aktivovat pozastavení, obnovení a události na pozadí v aplikacích pro UWP (při ladění)