將 Windows Phone Silverlight 商務和資料層移植到 UWP

上一個主題是 I/O、裝置和應用程式模型移植

UI 背後是您的商務層和資料層。 這些層級中的程式碼會呼叫作業系統和 .NET Framework API (例如,背景處理、位置、相機、檔案系統、網路和其他資料存取)。 其中絕大多數可用於通用 Windows 平台 (UWP) 應用程式,因此您能夠在不進行變更的情況下移植大部分程式碼。

非同步方法

通用 Windows 平台 (UWP) 的其中一個首要工作,是讓您能夠建置真正、一致的回應式應用程式。 動畫始終流暢,移動瀏覽和撥動等觸控互動即時且沒有延遲,讓人感覺 UI 觸手可及。 為了實現這一目標,任何無法保證在 50 毫秒內完成的 UWP API 都已設為非同步,並且其名稱以 Async 作為尾碼。 您的 UI 執行緒將在呼叫 Async 方法後立即傳回,而工作將在另一個執行緒上進行。 從語法上來說,使用 C# await 運算子、JavaScript Promise 物件和 C++ 延續讓使用 Async 方法變得非常容易。 如需詳細資訊,請參閱非同步程式設計

背景處理

Windows Phone Silverlight 應用程式可以使用受控 ScheduledTaskAgent 物件,在應用程式不在前景時執行工作。 UWP 應用程式會使用 BackgroundTaskBuilder 類別,以類似的方式建立和註冊背景工作。 您可以定義一個類別來實作背景工作。 系統會定期執行您的背景工作,呼叫類別的 Run 方法來執行工作。 在 UWP 應用程式中,請記住在應用程式套件資訊清單中設定背景工作宣告。 如需詳細資訊,請參閱使用背景工作支援應用程式

若要在背景傳輸大型資料檔案,Windows Phone Silverlight 應用程式會使用BackgroundTransferService 類別。 UWP 應用程式會使用 Windows.Networking.BackgroundTransfer 命名空間中的 API 來執行此操作。 這些功能會使用類似的模式來啟動傳輸,但新的 API 改善了其功能和效能。 如需詳細資訊,請參閱在背景傳輸資料

Windows Phone Silverlight 應用程式會使用 Microsoft.Phone.BackgroundAudio 命名空間中的受控類別,在應用程式不在前景時播放音訊。 UWP 使用 Windows Phone Store 應用程式模型,請參閱背景音訊背景音訊範例。

雲端服務、網路和資料庫

使用 Azure 可以在雲端託管資料和應用程式服務。 請參閱行動服務使用者入門。 有關需要線上和離線資料的解決方案,請參閱:在行動服務中使用離線資料同步處理

UWP 部分支援 System.Net.HttpWebRequest 類別,但不支援 System.Net.WebClient 類別。 如需具有前瞻性的替代方案,建議使用 Windows.Web.Http.HttpClient 類別 (或 System.Net.Http.HttpClient,如果您需要將程式碼移植到支援 .NET 的其他平台)。 這些 API 使用 System.Net.Http.HttpRequestMessage 來表示 HTTP 要求。

UWP 應用程式目前未內建支援資料密集型情境,例如企業營運 (LOB) 情境。 但是,您可以將 SQLite 用於本機交易資料庫服務。 如需詳細資訊,請參閱 SQLite

將絕對 URI (而不是相對 URI) 傳遞給 Windows 執行階段類型。 請參閱將 URI 傳遞給 Windows 執行階段

啟動器和選擇器

透過啟動器和選擇器 (位於 Microsoft.Phone.Tasks 命名空間中),Windows Phone Silverlight 應用程式可以與作業系統互動以執行常見作業,例如撰寫電子郵件、選擇相片或與其他應用程式共用某些類型的資料。 在主題 Windows Phone Silverlight 到 Windows 10 命名空間和類別對應 中搜尋 Microsoft.Phone.Tasks,以尋找對等的 UWP 類型。 這些範圍從類似的機制 (稱為啟動器和選擇器),到實作合約以在應用程式之間共用資料。

使用相片選擇器工作時,Windows Phone Silverlight 應用程式可以進入休眠狀態,甚至邏輯刪除。 使用 FileOpenPicker 類別時,UWP 應用程式會保持使用中狀態並執行。

貨幣化 (試用模式和應用程式內購買)

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 類別。

磚或快顯通知更新通知

通知是 Windows Phone Silverlight 應用程式推播通知模型的擴充功能。 當您收到來自 Windows 推播通知服務 (WNS) 的通知時,您可以透過磚更新或快顯通知將資訊呈現至 UI。 若要移植通知功能的 UI 端,請參閱磚和快顯通知

有關在 UWP 應用程式中使用通知的更多詳細資訊,請參閱傳送快顯通知

有關使用 C++、C# 或 Visual Basic 在 Windows 執行階段應用程式中使用磚、快顯通知、徽章、橫幅和通知的資訊和教學課程,請參閱使用磚、徽章和快顯通知

儲存體 (檔案存取)

將應用程式設定作為索引鍵/值組儲存在獨立儲存體中的 Windows Phone Silverlight 程式碼可以輕鬆移植。 以下是 Windows 電話 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 類別執行檔 i/o,因為它的支援時間較長。 假設您正在使用 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 應用程式中存取相片、音樂和影片檔案的資訊,請參閱音樂、圖片和影片媒體櫃中的檔案和資料夾

有關詳細資訊,請參閱檔案、資料夾和媒體櫃

下一個主題是外形規格和 UX 移植