So wird's gemacht: Registrieren einer Hintergrundaufgabe
Language: HTML | XAML

So wird’s gemacht: Registrieren einer Hintergrundaufgabe (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 eine Funktion erstellt wird, die zum sicheren Registrieren der meisten Hintergrundaufgaben wiederverwendet werden kann. Dieses Thema behandelt schrittweise eine Hilfsfunktion, die Hintergrundaufgaben registriert. Diese Hilfsfunktion sucht zuerst nach vorhandenen Registrierungen, um Probleme mit mehrfachen Registrierungen zu vermeiden. Sie kann außerdem eine Systembedingung auf die Hintergrundaufgabe anwenden. Die exemplarische Vorgehensweise enthält ein vollständiges lauffähiges Beispiel für diese Hilfsfunktion.

Hinweis  

Für Windows Phone Store-Apps müssen Sie RequestAccessAsync aufrufen, bevor Sie versuchen, Hintergrundaufgaben zu registrieren. Unter Windows ist dieser Aufruf ausschließlich für Hintergrundaufgaben erforderlich, die nur ausgeführt werden können, wenn sich Ihre App auf dem Sperrbildschirm befindet. Auf dem Smartphone müssen Sie diese Methode vor dem Registrieren einer Hintergrundaufgabe einmal aufrufen.

Um sicherzustellen, dass Ihre Windows Phone Store-App nach dem Freigeben eines Updates weiterhin ordnungsgemäß ausgeführt wird, rufen Sie RemoveAccess und RequestAccessAsync auf, wenn Ihre App nach dem Update startet. Weitere Infos finden Sie unter Richtlinien für Hintergrundaufgaben (Windows-Runtime-Apps).

Wissenswertes

Technologien

Voraussetzungen

  • In diesem Thema wird vorausgesetzt, dass Sie bereits eine Hintergrundaufgabe haben, die registriert werden muss. (In diesem Thema geht es nicht um das Erstellen einer Hintergrundaufgabe).

Anweisungen

Schritt 1: Definieren Sie die Methodensignatur und den Rückgabetyp

Diese Methode übernimmt den Einstiegspunkt der Aufgabe, den Namen der Aufgabe, einen vorgefertigten Trigger für die Hintergrundaufgabe und (optional) eine SystemCondition für die Hintergrundaufgabe. Diese Methode gibt ein BackgroundTaskRegistration-Objekt zurück.


public static BackgroundTaskRegistration RegisterBackgroundTask(
                                                string taskEntryPoint, 
                                                string name,
                                                IBackgroundTrigger trigger,
                                                IBackgroundCondition condition)
{
    
    // We’ll add code to this function in subsequent steps.

}

Schritt 2: Überprüfung von vorhandenen Registrierungen

Überprüfen Sie, ob die Aufgabe bereits registriert ist. Diese Überprüfung ist wichtig, denn eine mehrfach registrierte Hintergrundaufgabe wird mehrfach aufgerufen, wenn sie ausgelöst wird. Dies kann das CPU-Kontingent überlasten und zu unerwartetem Verhalten führen.

Sie können die vorhandenen Registrierungen durch Abfrage der BackgroundTaskRegistration.AllTasks-Eigenschaft und Iteration über das Ergebnis überprüfen. Überprüfen Sie die Namen aller Instanzen: wenn ein Name mit dem Namen der Aufgabe übereinstimmt, die registriert werden soll, verlassen Sie die Schleife, und legen Sie eine Flagvariable fest, damit Ihr Code im nächsten Schritt einen anderen Pfad wählen kann.

Hinweis  Verwenden Sie innerhalb Ihrer App eindeutige Namen für Aufgaben. Stellen Sie sicher, dass jede Hintergrundaufgabe einen eindeutigen Namen hat.
 

Der folgende Code registriert eine Hintergrundaufgabe mit dem im vorigen Schritt erstellten SystemTrigger:


public static BackgroundTaskRegistration RegisterBackgroundTask(
                                                string taskEntryPoint, 
                                                string name,
                                                IBackgroundTrigger trigger,
                                                IBackgroundCondition condition)
{
    //
    // Check for existing registrations of this background task.
    //

    foreach (var cur in BackgroundTaskRegistration.AllTasks)
    {

        if (cur.Value.Name == name)
        {
            // 
            // The task is already registered.
            // 

            return (BackgroundTaskRegistration)(cur.Value);
        }
    }


    // We’ll register the task in the next step.

}

Schritt 3: Registrieren der Hintergrundaufgabe (oder Rückgabe der bereits vorhandenen Registrierung)

Überprüfen Sie, ob sich die Aufgabe in der Liste der bereits registrierten Hintergrundaufgaben befindet. Geben Sie in diesem Fall diese Instanz der Aufgabe zurück.

Registrieren Sie die Aufgabe dann mithilfe eines neuen BackgroundTaskBuilder-Objekts. Der Code sollte überprüfen, ob der Parameter für die Bedingung null ist, und andernfalls die Bedingung an das Registrierungsobjekt anfügen. Geben Sie die von der BackgroundTaskBuilder.Register-Methode zurückgegebene BackgroundTaskRegistration zurück.

Hinweis  

Ab Windows 8.1 werden Parameter für die Registrierung von Hintergrundaufgaben zum Zeitpunkt der Registrierung überprüft. Bei ungültigen Registrierungsparametern wird ein Fehler zurückgegeben. Ihre App muss Szenarios, in denen die Registrierung von Hintergrundaufgaben fehlschlägt, problemlos verarbeiten können. Verwenden Sie beispielsweise eine Bedingungsanweisung, um die App auf Registrierungsfehler zu prüfen, und führen Sie die fehlgeschlagene Registrierung mit anderen Parameterwerten erneut durch.

 

Im folgenden Beispiel wird entweder die vorhandene Aufgabe zurückgegeben, oder es wird Code hinzugefügt, mit dem die Hintergrundaufgabe registriert wird (ggf. einschließlich der Systembedingung):


public static BackgroundTaskRegistration RegisterBackgroundTask(
                                                string taskEntryPoint, 
                                                string name,
                                                IBackgroundTrigger trigger,
                                                IBackgroundCondition condition)
{
    //
    // Check for existing registrations of this background task.
    //

    foreach (var cur in BackgroundTaskRegistration.AllTasks)
    {

        if (cur.Value.Name == taskName)
        {
            // 
            // The task is already registered.
            // 

            return (BackgroundTaskRegistration)(cur.Value);
        }
    }


    //
    // Register the background task.
    //

    var builder = new BackgroundTaskBuilder();

    builder.Name = name;
    builder.TaskEntryPoint = taskEntryPoint;
    builder.SetTrigger(trigger);

    if (condition != null)
    {

        builder.AddCondition(condition);
    }

    BackgroundTaskRegistration task = builder.Register();

    return task;
}

Hilfsfunktion zur Registrierung der abgeschlossenen Hintergrundaufgabe

Dieses Beispiel zeigt die Hilfsfunktion zur Registrierung der abgeschlossenen Hintergrundaufgabe. Diese Funktion kann zum Registrieren der meisten Hintergrundaufgaben mit Ausnahme von Hintergrundaufgaben im Netzwerk verwendet werden.


//
// Register a background task with the specified taskEntryPoint, name, trigger,
// and condition (optional).
//
// taskEntryPoint: Task entry point for the background task.
// taskName: A name for the background task.
// trigger: The trigger for the background task.
// condition: Optional parameter. A conditional event that must be true for the task to fire.
//
public static BackgroundTaskRegistration RegisterBackgroundTask(string taskEntryPoint,
                                                                string taskName,
                                                                IBackgroundTrigger trigger,
                                                                IBackgroundCondition condition)
{
    //
    // Check for existing registrations of this background task.
    //

    foreach (var cur in BackgroundTaskRegistration.AllTasks)
    {

        if (cur.Value.Name == taskName)
        {
            // 
            // The task is already registered.
            // 

            return (BackgroundTaskRegistration)(cur.Value);
        }
    }


    //
    // Register the background task.
    //

    var builder = new BackgroundTaskBuilder();

    builder.Name = taskName;
    builder.TaskEntryPoint = taskEntryPoint;
    builder.SetTrigger(trigger);

    if (condition != null)
    {

        builder.AddCondition(condition);
    }

    BackgroundTaskRegistration task = builder.Register();

    return task;
}

Verwandte Themen

Schnellstart: Erstellen und Registrieren einer Hintergrundaufgabe
So wird's gemacht: Reagieren auf Systemereignisse mit Hintergrundaufgaben
So wird's gemacht: Festlegen von Bedingungen für die Ausführung einer Hintergrundaufgabe
So wird's gemacht: Verwenden von Wartungstriggern
So wird's gemacht: Behandeln einer abgebrochenen Hintergrundaufgabe
So wird's gemacht: Überwachen des Status und Abschlusses von Hintergrundaufgaben
So wird's gemacht: Ausführen einer Hintergrundaufgabe mit einem Timer
So wird's gemacht: Debuggen einer Hintergrundaufgabe
So wird's gemacht: Auslösen von Anhalte-, Fortsetzungs- und Hintergrundereignissen in Windows Store-Apps (beim Debuggen)

 

 

Anzeigen:
© 2016 Microsoft