Перенос уровней бизнеса и данных c Windows Phone Silverlight на UWP

Предыдущий раздел назывался Перенос для ввода-вывода, устройств и моделей приложений.

За вашим пользовательским интерфейсом расположены уровни бизнеса и данных. Код в этих уровнях вызывает операционную систему и API .NET Framework (например, фоновую обработку, местонахождение, камеру, файловую систему, сети и другой доступ к данным). Подавляющее их большинство доступно для приложения UWP, поэтому вы можете рассчитывать на то, что большая часть этого кода может быть перенесена без изменений.

Асинхронные методы

Один из приоритетов UWP — обеспечение возможности выполнять построение приложений, которые действительно и последовательно реагируют на действия пользователя. Анимации всегда выполняются плавно, а сенсорное взаимодействие (например, панорамирование и прокрутка) является мгновенным и выполняется без задержек, создавая впечатление, что пользовательский интерфейс соединен с вашим пальцем. Чтобы достичь этого, любой API-интерфейс UWP, который не может гарантировать завершение в пределах 50 мс, был реализован асинхронным, а к его имени добавлен суффикс Async. Ваш поток пользовательского интерфейса немедленно возвращается из вызова метода Async и работа происходит в другом потоке. Использование метода Async синтаксически очень простое: используются оператор C# await, объекты Promise JavaScript и продолжения C++. Дополнительные сведения см. в разделе Асинхронное программирование.

Фоновая обработка

Приложение Windows Phone Silverlight может использовать управляемый объект ScheduledTaskAgent для выполнения задачи, в то время как приложение не находится на переднем плане. Приложение UWP использует класс BackgroundTaskBuilder для создания и регистрации фоновой задачи подобным образом. Вы определяете класс, реализующий работу фоновой задачи. Система выполняет фоновую задачу, периодически вызывая метод Run вашего класса для выполнения работы. Не забудьте в приложении UWP установить объявление Фоновые задачи в манифесте пакета приложения. Дополнительные сведения см. в разделе Поддержка приложения с помощью фоновых задач.

Для передачи больших файлов данных в фоновом режиме приложение Windows Phone Silverlight использует класс BackgroundTransferService. В приложении UWP для этого используются API-интерфейсы в пространстве имен Windows.Networking.BackgroundTransfer. Данные функции используют аналогичный шаблон начала передачи данных, но новый API обладает улучшенными возможностями и производительностью. Дополнительные сведения см. в разделе Передача данных в фоновом режиме.

Приложение Windows Phone Silverlight использует управляемые классы в пространстве имен Microsoft.Phone.BackgroundAudio для воспроизведения звука, когда приложение не находится на переднем плане. UWP использует модель приложения Магазина Windows Phone. См. раздел Фоновый звук и пример Фоновый звук.

Облачные службы, сеть и и базы данных

Размещение данных и служб приложений в облаке возможны с помощью Azure. См. раздел Начало работы с мобильными службами. Решения, которым требуются сетевые и автономные данные, описаны в разделе Использование синхронизации автономных данных в мобильных службах.

UWP частично поддерживает класс System.Net.HttpWebRequest, но класс System.Net.WebClient не поддерживается. Рекомендуемая дальновидная альтернатива — класс Windows.Web.Http.HttpClient (или System.Net.Http.HttpClient, если необходимо, чтобы код можно было переносить на другие платформы, поддерживающие .NET). Эти API-интерфейсы используют System.Net.Http.HttpRequestMessage для представления запроса HTTP.

Приложения UWP на данный момент не имеют встроенной поддержки обработки больших объемов данных, которая, в частности, требуется в бизнес-приложениях. Однако вы можете настроить использование SQLite для локальных операционных служб баз данных. Подробнее см. в разделе SQLite.

Передайте абсолютные URI, а не относительные URI, типам среды выполнения Windows. См. раздел Передача URI в среду выполнения Windows.

Средства запуска и выбора

С помощью средств запуска и выбора (расположенных в пространстве имен Microsoft.Phone.Tasks) приложение Windows Phone Silverlight может взаимодействовать с операционной системой для выполнения общих операций, таких как составление почты, выбор фотографии или предоставление некоторых типов данных другому приложению. Ищите информацию о Microsoft.Phone.Tasks в разделе Сопоставление Windows Phone Silverlight с пространствами имен и классами Windows 10, чтобы найти эквивалент данного типа UWP. Они варьируются от подобных механизмов, называемых средствами запуска и выбора, до реализации контракта для совместного использования данных между приложениями.

Приложение Windows Phone Silverlight можно поместить в неактивное состояние или даже полностью удалить при использовании, например, задание средства выбора фотографий. Приложение UWP остается активным и продолжает работу во время использования класса FileOpenPicker.

Получение дохода (пробный режим и покупки из приложения)

Приложение Windows Phone Silverlight может использовать класс UWP CurrentApp для большей части пробного режима и функций покупки из приложения, чтобы не переносить код. Но приложение Windows Phone Silverlight вызывает MarketplaceDetailTask.Show, чтобы предложить купить это приложение.

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

Порт этого кода для вызова метода UWP RequestAppPurchaseAsync :

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

Если у вас есть код, который имитирует покупку вашего приложения и возможности покупки из приложения для тестирования, то вы можете перенести его, чтобы он вместо этого использовал класс CurrentAppSimulator.

Уведомления для обновления плиток или всплывающих уведомлений

Уведомления — это расширение модели push-уведомлений для приложений Windows Phone Silverlight. При получении уведомления из службы push-уведомлений Windows (WNS) можно отобразить эти сведения на поверхности пользовательского интерфейса с помощью обновления плитки или всплывающего уведомления. Для получения дополнительных сведений о переносе стороны пользовательского интерфейса ваших функций уведомлений см. разделы Плитки и всплывающие уведомления.

Дополнительные сведения об использовании уведомлений в приложениях UWP см. в статье Отправка всплывающих уведомлений.

Дополнительные сведения и учебники по использованию плиток, всплывающих уведомлений, индикаторов событий, баннеров и уведомлений в приложениях среды выполнения Windows на C++, C# или Visual Basic см. в статье Работа с плитками, индикаторами событий и всплывающими уведомлениями.

Хранилище (доступ к файловой системе)

Код Windows Phone Silverlight, который хранит параметры приложения в виде пар "ключ-значение" в изолированном хранилище легко переносится. Ниже приведен пример до и после, сначала показана версия Windows Phone Silverlight.

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

И эквивалент UWP:

    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>";

Хотя часть пространства имен Windows.Storage им доступна, многие приложения Windows Phone Silverlight выполняют вводы-выводы файла с помощью класса IsolatedStorageFile, потому что он поддерживается на протяжении большего количества времени. Ниже приведен пример написания и чтения файла до и после с условием, что используется IsolatedStorageFile. Сначала показана версия Windows Phone Silverlight.

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

И та же функция с помощью 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);

Приложение Windows Phone Silverlight имеет доступ к дополнительной SD-карте только для чтения. Приложение UWP имеет доступ к SD-карте для чтения и записи. Дополнительные сведения см. в разделе Доступ к SD-карте.

Сведения о доступе к файлам фотографий, музыки и видео в приложении UWP см. в разделе Файлы и папки в библиотеках музыки, изображений и видео.

Дополнительную информацию см. в разделе Файлы, папки и библиотеки.

Следующий раздел называется Перенос для форм-фактора и взаимодействия с пользователем.