Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
ważne interfejsy API
Dowiedz się, jak aplikacja może rozpoznawać postęp i zakończenie zgłaszane przez zadanie w tle, które działa poza procesem. (W przypadku zadań w tle w procesie można ustawić zmienne udostępnione, aby oznaczać postęp i ukończenie).
Postęp i zakończenie zadania w tle można monitorować za pomocą kodu aplikacji. W tym celu aplikacja subskrybuje zdarzenia z zadań w tle zarejestrowanych w systemie.
- W tym temacie założono, że masz aplikację, która rejestruje zadania w tle. Aby szybko rozpocząć tworzenie zadania w tle, zobacz Tworzenie i rejestrowanie zadania w tle w procesie lub Tworzenie i rejestrowanie zadania w tle poza procesem. Aby uzyskać bardziej szczegółowe informacje na temat warunków i wyzwalaczy, zobacz Support your app with background tasks (Obsługa aplikacji przy użyciu zadań w tle).
Tworzenie programu obsługi zdarzeń do obsługi ukończonych zadań w tle
Krok 1
Utwórz funkcję obsługi zdarzeń do obsługi ukończonych zadań w tle. Ten kod musi mieć określony schemat, który przyjmuje obiekt IBackgroundTaskRegistration oraz obiekt BackgroundTaskCompletedEventArgs.
Użyj następującego wzorca dla metody obsługi zdarzenia zadania w tle 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.
};
Krok 2
Dodaj kod do procedury obsługi zdarzeń, która zajmuje się ukończeniem zadania w tle.
Na przykład przykładowe zadanie w tle aktualizuje interfejs użytkownika.
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();
};
Tworzenie funkcji obsługi zdarzeń do obsługi postępu zadania w tle
Krok 1
Utwórz funkcję obsługi zdarzeń do obsługi ukończonych zadań w tle. Ten kod musi mieć określoną strukturę, która przyjmuje obiekt IBackgroundTaskRegistration oraz obiekt BackgroundTaskProgressEventArgs:
Użyj następującego szablonu dla metody obsługi zdarzeń zadania w tle 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.
};
Krok 2
Dodaj kod do procedury obsługi zdarzeń, która zajmuje się ukończeniem zadania w tle.
Na przykład przykładowe zadanie w tle aktualizuje interfejs użytkownika ze stanem postępu przekazywanym za pośrednictwem 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();
};
Rejestruj funkcje obsługi zdarzeń w ramach nowych i istniejących zadań w tle
Krok 1
Gdy aplikacja rejestruje zadanie w tle po raz pierwszy, powinna zarejestrować się w celu otrzymywania aktualizacji postępu i ukończenia, jeśli zadanie jest uruchamiane, gdy aplikacja jest nadal aktywna na pierwszym planie.
Na przykład przykład zadania w tle wywołuje następującą funkcję na każdym zadaniu, które rejestruje:
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
Po uruchomieniu aplikacji lub przejściu do nowej strony, gdzie stan zadań w tle jest istotny, powinna uzyskać listę aktualnie zarejestrowanych zadań w tle i skojarzyć je z funkcjami obsługi zdarzeń postępu i ukończenia. Lista zadań w tle zarejestrowanych obecnie przez aplikację jest przechowywana w BackgroundTaskRegistration.AllTasks właściwości.
Na przykład przykładowe zadanie w tle używa następującego kodu do dołączania programów obsługi zdarzeń po przejściu do strony 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();
}
Tematy pokrewne
- Utwórz i zarejestruj zadanie w tle w ramach procesu.
- Tworzenie i rejestrowanie zadania w tle poza procesem
- Deklarowanie zadań w tle w manifeście aplikacji
- Zarządzanie anulowanym zadaniem w tle
- Zarejestruj zadanie w tle
- Reagowanie na zdarzenia systemowe za pomocą zadań w tle
- Ustawianie warunków uruchamiania zadania w tle
- Zaktualizuj dynamiczny kafelek za pomocą zadania w tle
- Skorzystaj z wyzwalacza konserwacji
- Uruchamianie zadania w tle na czasomierzu
- Wytyczne dotyczące zadań w tle
- Debugowanie zadania w tle
- Jak wyzwalać zdarzenia związane z wstrzymywaniem, wznawianiem oraz działaniem w tle w aplikacjach UWP (podczas debugowania)