Portieren von Windows Phone Silverlight-Geschäfts- und -Datenebenen zu UWP

Das vorherige Thema war Portieren: E/A, Gerät und App-Modell.

Im Hintergrund Ihrer Benutzeroberfläche befinden sich Ihre Geschäfts- und Datenebenen. Der Code auf diesen Ebenen ruft Betriebssystem- und .NET Framework-APIs auf (z. B. Hintergrundverarbeitung, Position, Kamera, Dateisystem, Netzwerk und andere Datenzugriffsfunktionen). Die meisten dieser APIs sind für eine UWP (Universelle Windows-Plattform)-App verfügbar. Sie können also davon ausgehen, dass sich ein Großteil dieses Codes ohne Änderungen portieren lässt.

Asynchrone Methoden

Einer der Hauptvorteile der universellen Windows-Plattform (UWP) besteht darin, das sie Ihnen die Erstellung von Apps ermöglicht, die wirklich und durchgehend reaktionsfähig sind. Animationen sind immer reibungslos, und Touchinteraktionen wie Verschieben und Wischen erfolgen sofort und ohne Verzögerung, wodurch der Eindruck entsteht, dass die UI quasi an Ihrem Finger „klebt“. Um dies zu erreichen, wurden alle UWP-APIs, deren Ausführung innerhalb von 50 Millisekunden nicht garantiert werden kann, als asynchron konzipiert und mit dem Namenssuffix Async versehen. Die Rückgabe Ihres UI-Threads nach dem Aufruf einer Async-Methode erfolgt sofort, und die Arbeit wird in einem anderen Thread ausgeführt. Die Nutzung einer Async-Methode ist in Bezug auf die Syntax mit dem C#-Operator await, JavaScript-Promise-Objekten und C++-Fortsetzungen sehr einfach. Weitere Informationen finden Sie unter Asynchrone Programmierung.

Hintergrundverarbeitung

Eine Windows Phone Silverlight-App kann ein verwaltetes ScheduledTaskAgent-Objekt verwenden, um eine Aufgabe auszuführen, während sich die App nicht im Vordergrund befindet. UWP-Apps verwenden auf ähnliche Weise die BackgroundTaskBuilder-Klasse zum Erstellen und Registrieren von Hintergrundaufgaben. Sie definieren eine Klasse, die die Arbeit Ihrer Hintergrundaufgabe implementiert. Das System führt die Hintergrundaufgabe regelmäßig aus, indem die Run-Methode der Klasse zum Ausführen der Arbeit aufgerufen wird. Denken Sie bei einer UWP-App daran, die Deklaration Hintergrundaufgaben im App-Paketmanifest festzulegen. Weitere Informationen finden Sie unter Unterstützen der App mit Hintergrundaufgaben.

Um große Datendateien im Hintergrund zu übertragen, verwendet eine Windows Phone Silverlight-App die BackgroundTransferService-Klasse. Eine UWP-App verwendet zu diesem Zweck APIs im Windows.Networking.BackgroundTransfer-Namespace. Die Features initiieren Übertragungen anhand eines ähnlichen Musters, die neue API verfügt aber über verbesserte Funktionen und eine höhere Leistung. Weitere Informationen finden Sie unter Übertragen von Daten im Hintergrund.

Eine Windows Phone Silverlight-App verwendet die verwalteten Klassen im Microsoft.Phone.BackgroundAudio-Namespace zum Wiedergeben von Audio, während sich die App nicht im Vordergrund befindet. Die UWP verwendet das Windows Phone Store-App-Modell. Weitere Informationen finden Sie unter Hintergrundaudio und im Hintergrundaudio-Beispiel.

Clouddienste, Netzwerk und Datenbanken

Das Hosten von Daten und App-Diensten in der Cloud ist mit Azure möglich. Weitere Informationen finden Sie unter Erste Schritte mit Mobile Services. Für Lösungen, die sowohl Online- als auch Offlinedaten erfordern: Verwendung der Offlinedatensynchronisierung in Mobile Services.

Die UWP verfügt über eine Teilunterstützung für die System.Net.HttpWebRequest-Klasse, aber die System.Net.WebClient-Klasse wird nicht unterstützt. Die empfohlene modernere Alternative ist die Windows.Web.Http.HttpClient-Klasse (oder System.Net.Http.HttpClient, wenn Ihr Code auf andere Plattformen mit .NET-Unterstützung portierbar sein soll). Für diese APIs wird System.Net.Http.HttpRequestMessage verwendet, um eine HTTP-Anforderung darzustellen.

UWP-Apps bieten zurzeit keine integrierte Unterstützung für datenintensive Szenarien wie beispielsweise Branchenszenarien. Sie können jedoch SQLite für lokale Transaktionsdatenbankdienste verwenden. Weitere Informationen finden Sie unter SQLite.

Übergeben Sie absolute URIs, keine relativen URIs, an Windows-Runtime-Typen. Weitere Informationen finden Sie unter Übergeben eines URI an die Windows-Runtime.

Launcher und Chooser

Mit Launchern und Choosern (im Microsoft.Phone.Tasks-Namespace) kann eine Windows Phone Silverlight-App mit dem Betriebssystem interagieren, um allgemeine Vorgänge auszuführen (z. B. Erstellen einer E-Mail, Auswählen eines Fotos oder Teilen bestimmter Arten von Daten mit einer anderen App). Den entsprechenden UWP-Typ finden Sie unter Microsoft.Phone.Tasks im Thema Windows Phone Silverlight zu Windows 10: Namespace- und Klassenzuordnungen. Diese reichen von ähnlichen Mechanismen (so genannten Launchern und Pickern) bis zur Implementierung eines Vertrags zum Teilen von Daten zwischen Apps.

Wenn z. B. die Fotoauswahlaufgabe verwendet wird, kann eine Windows Phone Silverlight-App in einen Ruhezustand versetzt oder sogar als veraltet markiert werden. Eine UWP-App bleibt aktiv und wird weiter ausgeführt, wenn die FileOpenPicker-Klasse verwendet wird.

Monetisierung (Testmodus und In-App-Einkäufe)

Eine Windows Phone Silverlight-App kann die UWP CurrentApp-Klasse für die meisten Ihrer Testmodus- und In-App-Kauffunktionen verwenden, sodass Code nicht portiert werden muss. Eine Windows Phone Silverlight-App ruft jedoch MarketplaceDetailTask.Show auf, um die App zum Kauf anzubieten:

    private void Buy()
    {
        MarketplaceDetailTask marketplaceDetailTask = new MarketplaceDetailTask();
        marketplaceDetailTask.ContentType = MarketplaceContentType.Applications;
        marketplaceDetailTask.Show();
    }

Portieren Sie diesen Code, um die UWP RequestAppPurchaseAsync-Methode aufzurufen:

    private async void Buy()
    {
        await Windows.ApplicationModel.Store.CurrentApp.RequestAppPurchaseAsync(false);
    }

Falls Sie über Code verfügen, der Ihre Features für App-Kauf und In-App-Einkäufe zu Testzwecken simuliert, können Sie ihn portieren, um stattdessen die CurrentAppSimulator-Klasse zu verwenden.

Benachrichtigungen für Kachel- oder Popupaktualisierungen

Benachrichtigungen sind eine Erweiterung des Pushbenachrichtigungsmodells für Windows Phone Silverlight-Apps. Wenn Sie eine Benachrichtigung vom Windows-Pushbenachrichtigungsdienst (WNS) empfangen, können Sie die Informationen mit einer Kachelaktualisierung oder einem Popup in der Benutzeroberfläche anzeigen. Informationen zum Portieren des Benutzeroberflächenteils Ihrer Benachrichtigungsfeatures finden Sie unter Kacheln und Popups.

Ausführlichere Informationen zur Verwendung von Benachrichtigungen in UWP-Apps finden Sie unter Senden von Popupbenachrichtigungen.

Informationen und Lernprogramme zur Verwendung von Kacheln, Popups, Signalen, Bannern und Benachrichtigungen in einer Windows-Runtime-App mit C++, C# oder Visual Basic finden Sie unter Verwenden von Kacheln, Signalen und Popupbenachrichtigungen.

Speicher (Dateizugriff)

Windows Phone Silverlight-Code, der App-Einstellungen als Schlüssel-Wert-Paare in isoliertem Speicher speichert, kann problemlos portiert werden. Hier sehen Sie ein Vorher-Nachher-Beispiel, und zwar zuerst die Windows Phone Silverlight-Version:

    var propertySet = IsolatedStorageSettings.ApplicationSettings;
    const string key = "favoriteAuthor";
    propertySet[key] = "Charles Dickens";
    propertySet.Save();
    string myFavoriteAuthor = propertySet.Contains(key) ? (string)propertySet[key] : "<none>";

Und hier die UWP-Entsprechung:

    var propertySet = Windows.Storage.ApplicationData.Current.LocalSettings.Values;
    const string key = "favoriteAuthor";
    propertySet[key] = "Charles Dickens";
    string myFavoriteAuthor = propertySet.ContainsKey(key) ? (string)propertySet[key] : "<none>";

Obwohl eine Teilmenge des Windows.Storage-Namespaces für sie verfügbar ist, führen viele Windows Phone Silverlight-Apps E/A-Dateivorgänge mit der IsolatedStorageFile-Klasse aus, da diese schon länger unterstützt wird. Hier sehen Sie ein Vorher-Nachher-Beispiel für das Schreiben und Lesen einer Datei unter Verwendung von IsolatedStorageFile, und zwar zuerst die Windows Phone Silverlight-Version:

    const string filename = "FavoriteAuthor.txt";
    using (var store = IsolatedStorageFile.GetUserStoreForApplication())
    {
        using (var streamWriter = new StreamWriter(store.CreateFile(filename)))
        {
            streamWriter.Write("Charles Dickens");
        }
        using (var StreamReader = new StreamReader(store.OpenFile(filename, FileMode.Open, FileAccess.Read)))
        {
            string myFavoriteAuthor = StreamReader.ReadToEnd();
        }
    }

Und hier die gleiche Funktionalität mit der UWP:

    const string filename = "FavoriteAuthor.txt";
    var store = Windows.Storage.ApplicationData.Current.LocalFolder;
    Windows.Storage.StorageFile file = await store.CreateFileAsync(filename, Windows.Storage.CreationCollisionOption.ReplaceExisting);
    await Windows.Storage.FileIO.WriteTextAsync(file, "Charles Dickens");
    file = await store.GetFileAsync(filename);
    string myFavoriteAuthor = await Windows.Storage.FileIO.ReadTextAsync(file);

Eine Windows Phone Silverlight-App hat schreibgeschützten Zugriff auf die optionale SD-Karte. Eine UWP-App hat Lese-/Schreibzugriff auf die SD-Karte. Weitere Informationen finden Sie unter Zugreifen auf die SD-Karte.

Informationen zum Zugriff auf Fotos, Musik und Videodateien in einer UWP-App finden Sie unter Dateien und Ordner in den Musik-, Bild- und Videobibliotheken.

Weitere Informationen finden Sie unter Dateien, Ordner und Bibliotheken.

Das nächste Thema ist Portieren für Formfaktor und Benutzerfreundlichkeit.