So wird's gemacht: Überwachen des Status und Abschlusses von Hintergrundaufgaben
Language: HTML | XAML

So wird’s gemacht: Überwachen des Status und Abschlusses von Hintergrundaufgaben (XAML)

[ Dieser Artikel richtet sich an Windows 8.x- und Windows Phone 8.x-Entwickler, die Windows-Runtime-Apps schreiben. Wenn Sie für Windows 10 entwickeln, finden Sie weitere Informationen unter neueste Dokumentation]

Hier erfahren Sie, wie Ihre App den von einer Hintergrundaufgabe gemeldeten Status und Abschluss erkennt. Hintergrundaufgaben sind zwar von der App entkoppelt und werden getrennt ausgeführt, Status und Abschluss können jedoch vom App-Code überwacht werden. Hierzu abonniert die App Ereignisse der Hintergrundaufgaben, die sie im System registriert hat.

Wissenswertes

Technologien

Voraussetzungen

Anweisungen

Schritt 1:

  1. Erstellen Sie eine Ereignishandlerfunktion zum Behandeln abgeschlossener Hintergrundaufgaben. Dieser Code muss einem bestimmten Profil entsprechen und ein IBackgroundTaskRegistration-Objekt sowie ein BackgroundTaskCompletedEventArgs-Objekt enthalten.

    Verwenden Sie das folgende Profil für die Ereignishandlermethode für die OnCompleted-Hintergrundaufgabe:

    
    auto completed = [this](BackgroundTaskRegistration^ task, BackgroundTaskCompletedEventArgs^ args)
    {
        // TODO: Add code that deals with background task completion.
    };
    
    
  2. Fügen Sie dem Ereignishandler Code zum Behandeln des Abschlusses der Hintergrundaufgabe hinzu.

    So aktualisiert beispielsweise das Beispiel für eine Hintergrundaufgabe die Benutzeroberfläche mit dem in "LocalSettings" gespeicherten Status:

    
    auto completed = [this](BackgroundTaskRegistration^ task, BackgroundTaskCompletedEventArgs^ args)
    {    
        UpdateUI();
    };
    
    
  3. Eine robuste App kann durch Aufrufen von CheckResult nach Ausnahmen suchen, die von der Hintergrundaufgabe ausgelöst werden.

    Das Beispiel für eine Hintergrundaufgabe kann wie folgt geändert werden, um von der Hintergrundaufgabe ausgelöste Ausnahmen zu behandeln:

    
    auto completed = [this](BackgroundTaskRegistration^ task, BackgroundTaskCompletedEventArgs^ args)
    {
        auto settings = ApplicationData::Current->LocalSettings;
        auto key = task->TaskId.ToString();
        
        try
        {
            args->CheckResult();
        }
        catch (Platform::Exception ^ ex)
        {
            auto settings = ApplicationData::Current->LocalSettings->Values;
            auto name = task->Name->ToString();
            
            if (settings->HasKey(name))
            {
                String^ status = ex->ToString();
                
                settings->Insert(name, status);
            }
        }
        
        UpdateUI();
    };
    
    

Schritt 2:

  1. Erstellen Sie eine Ereignishandlerfunktion zum Behandeln abgeschlossener Hintergrundaufgaben. Dieser Code muss einem bestimmten Profil entsprechen und ein IBackgroundTaskRegistration-Objekt sowie ein BackgroundTaskProgressEventArgs-Objekt enthalten:

    Verwenden Sie das folgende Profil für die Ereignishandlermethode für die OnProgress-Hintergrundaufgabe:

    
    auto progress = [this](BackgroundTaskRegistration^ task, BackgroundTaskProgressEventArgs^ args)
    {
        // TODO: Add code that deals with background task progress.
    };
    
    
  2. Fügen Sie dem Ereignishandler Code zum Behandeln des Abschlusses der Hintergrundaufgabe hinzu.

    So aktualisiert beispielsweise das Beispiel für eine Hintergrundaufgabe die Benutzeroberfläche mit dem Fortschrittsstatus, der mithilfe des args-Parameters übergeben wird:

    
    auto progress = [this](BackgroundTaskRegistration^ task, BackgroundTaskProgressEventArgs^ args)
    {
        auto progress = "Progress: " + args->Progress + "%";
        BackgroundTaskSample::SampleBackgroundTaskProgress = progress;
    
        UpdateUI();
    };
    
    

Schritt 3:

Registrieren Sie die Ereignishandlerfunktionen mit neuen und vorhandenen Hintergrundaufgaben.

  1. Wenn die App erstmals eine Hintergrundaufgabe registriert, muss sie sich für den Empfang von Status- und Abschlussupdates registrieren, falls die Aufgabe ausgeführt wird, während die App im Vordergrund noch aktiv ist.

    So ruft beispielsweise das Beispiel für eine Hintergrundaufgabe für jede Hintergrundaufgabe, die es registriert, die folgende Funktion auf:

    
    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);
    }
    
    
  2. Wenn die App startet oder zu einer neuen Seite navigiert, für die der Hintergrundaufgabenstatus relevant ist, muss sie eine Liste mit den derzeit registrierten Hintergrundaufgaben abrufen und diese den Status- und Abschlussereignishandlerfunktionen zuordnen. Die Liste mit den derzeit von der Anwendung registrierten Hintergrundaufgaben ist in der Eigenschaft "BackgroundTaskRegistration.AllTasks" gespeichert.

    So verwendet beispielsweise das Beispiel für eine Hintergrundaufgabe den folgenden Code, um Ereignishandler anzufügen, wenn zur Seite "SampleBackgroundTask" navigiert wird:

    
    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();
    }
    
    

Verwandte Themen

Schnellstart: Erstellen und Registrieren einer Hintergrundaufgabe
So wird's gemacht: Registrieren einer Hintergrundaufgabe
So wird's gemacht: Abrufen einer Liste mit ausstehenden Hintergrundaufgaben
So wird's gemacht: Behandeln einer abgebrochenen Hintergrundaufgabe
So wird's gemacht: Deklarieren von Hintergrundaufgaben im Anwendungsmanifest
So wird's gemacht: Debuggen einer Hintergrundaufgabe
Richtlinien und Prüflisten für Hintergrundaufgaben

 

 

Anzeigen:
© 2017 Microsoft