Share via


開發幕前應用程式

瞭解Windows 10 IoT 核心版支援的語言,以及 IoT 核心版支援的 UWP 和非 UWP 應用程式類型。

注意

除非安裝了 Visual Studio 可存取的 RS4 或更新版本的 SDK,否則在部署至 RS5 (或已啟用 OpenSSH 的 RS4) IoT 映像時,Visual Studio 將產生難以理解的錯誤。

應用程式類型

通用 Windows 平台 (UWP) 應用程式

IoT 核心版是以 UWP 為中心的作業系統,而 UWP 應用程式是其主要應用程式類型。

通用 Windows 平臺 (UWP) 是所有版本Windows 10的常見應用程式平臺,包括Windows 10 IoT 核心版。 UWP 是 WinRT) Windows 執行階段 (演進。 您可以 在這裡找到更多資訊和 UWP 的概觀。

Visual Studio 是撰寫適用于 IoT 核心版和一般 UWP 應用程式的主要工具。 您可以 在這裡找到 Visual Studio 相容性需求的詳細清單。

傳統 UWP 應用程式

UWP 應用程式僅適用于 IoT 核心版,就像在其他Windows 10版本一樣。 Visual Studio 中的簡單空白 Xaml 應用程式會正確地部署到 IoT 核心版裝置,就像在手機或Windows 10電腦上一樣。 IoT 核心版完全支援所有標準 UWP 語言和專案範本。

傳統 UWP app-model 有一些新增功能可支援 IoT 案例,而利用它們的任何 UWP app 都需要新增至其資訊清單的對應資訊。 特別是,必須將 「iot」 命名空間新增至這些標準 UWP 應用程式的資訊清單。

<Package> 資訊清單的 屬性內,您必須定義 iot xmlns,並將它新增至 IgnorableNamespaces 清單。 最終的 xml 看起來應該像這樣:

<Package
  xmlns="http://schemas.microsoft.com/appx/manifest/foundation/windows10"
  xmlns:mp="http://schemas.microsoft.com/appx/2014/phone/manifest"
  xmlns:uap="http://schemas.microsoft.com/appx/manifest/uap/windows10"
  xmlns:iot="http://schemas.microsoft.com/appx/manifest/iot/windows10"
  IgnorableNamespaces="uap mp iot">

背景應用程式

除了傳統 UI 應用程式之外,IoT 核心版還新增了稱為「背景應用程式」的新 UWP 應用程式類型。 這些應用程式沒有 UI 元件,而是具有實作 「IBackgroundTask」 介面的類別。 然後,他們會將該類別註冊為 「StartupTask」,以便在系統開機時執行。 由於它們仍是 UWP 應用程式,因此可以存取同一組 API,而且支援來自相同語言。 唯一的差別在於沒有 UI 進入點。

每種 IBackgroundTask 類型都會取得自己的資源原則。 這通常限制在改善這些背景應用程式是前景 UI 應用程式的次要元件之裝置上的電池使用時間和電腦資源。 在 IoT 裝置上,Background Apps 通常是裝置的主要功能,因此這些 StartupTask 會取得資源原則,以鏡像其他裝置上的前景 UI 應用程式。

下列範例顯示建置 C# 背景應用程式所需的程式碼,以閃爍 LED:

namespace BlinkyHeadlessCS
{
    public sealed class StartupTask : IBackgroundTask
    {
        BackgroundTaskDeferral deferral;
        private GpioPinValue value = GpioPinValue.High;
        private const int LED_PIN = 5;
        private GpioPin pin;
        private ThreadPoolTimer timer;

        public void Run(IBackgroundTaskInstance taskInstance)        {
            deferral = taskInstance.GetDeferral();
            InitGPIO();
            timer = ThreadPoolTimer.CreatePeriodicTimer(Timer_Tick, TimeSpan.FromMilliseconds(500));

        }
        private void InitGPIO()
        {
            pin = GpioController.GetDefault().OpenPin(LED_PIN);
            pin.Write(GpioPinValue.High);
            pin.SetDriveMode(GpioPinDriveMode.Output);
        }

        private void Timer_Tick(ThreadPoolTimer timer)
        {
            value = (value == GpioPinValue.High) ? GpioPinValue.Low : GpioPinValue.High;
            pin.Write(value);
        }
    }
}

您可以 在這裡找到背景應用程式的深入資訊。

非 UWP 應用程式

IoT 核心版支援某些傳統 Win32 應用程式類型,例如 Win32 主控台應用程式和 NT 服務。 這些應用程式建置和執行的方式與 Windows 10 Desktop 相同。 此外,還有 IoT Core C++ 主控台專案範本,可讓您輕鬆地使用 Visual Studio 建置這類應用程式。

這些非 UWP 應用程式有兩個主要限制:

  1. 不支援舊版 Win32 UI: IoT 核心版不包含 API 來建立傳統 (HWND) Windows。 無法使用舊版方法,例如 CreateWindow () 和 CreateWindowEx () 或任何其他處理 Windows 控制碼的方法, (HWND) 。 之後,IoT 核心版不支援相依于這類 API 的架構,包括 MFC、Windows Forms和 WPF
  2. 僅限 C++ 應用程式: 目前僅支援 C++ 在 IoT 核心版上開發 Win32 應用程式。

程式語言:

IoT 核心版支援各種不同的程式設計語言。

In-Box語言

根據預設,傳統 UWP 語言隨附于 Visual Studio 中支援。 所有In-Box語言都支援 UI 和背景應用程式

  • 語言
    • C#
    • C++
    • JavaScript
    • Visual Basic

Arduino 連接

Arduino 線路需要從 Visual Studio Tools-Extensions > 和 更新管理員下載「Windows IoT 核心版專案範本」。 Arduino 線路僅支援背景應用程式。 您也可以使用 C#、C++ 或 Visual Basic 建置Windows 執行階段元件,然後從任何其他語言參考這些程式庫。

C# 和 Visual Basic (VB)

C# 和 VB 都支援為 UWP 應用程式,並可存取 UWP 應用程式可用的.NET Framework部分。 它們支援使用 Xaml 和 Background Apps 建置的 UI 應用程式。 您也可以建置可從其他支援語言使用的Windows 執行階段元件

範例:

JavaScript

您可以使用 JavaScript 來建置 UI 和 Background Apps。 UI 應用程式在所有 UWP 版本上的運作方式都相同。 背景應用程式是 IoT 核心版的新功能,但很簡單。 下列範例程式碼顯示 JS 新增專案範本的輸出:

// The Background Application template is documented at http://go.microsoft.com/fwlink/?LinkID=533884&clcid=0x409
(function () {
    "use strict";

    // TODO: Insert code here for the startup task

})();

C++

使用 C++,您可以建置 Xaml 或 DirectX UI 應用程式,以及 UWP 背景專案和非 UI Win32 應用程式。

範例:

注意

對於打算以 C++ 撰寫其應用程式的人員,您必須在下載時勾選 [UWP C++] 核取方塊。

適用于 Visual Studio 的 C++

?### Arduino 連接

透過 Arduino 線路支援,您可以針對 IoT 生態系統中許多熱門的元件和周邊,在 Arduino 線路中建置應用程式。

我們的 Arduino 連接專案指南 提供如何設定以建置這些應用程式的完整指示。 下面複製並連結的範例可協助您開始自行建置。 您甚至可以 在 Arduino 中建置可從其他語言使用的 WinRT 元件

閃爍範例程式碼 完整的 範例程式碼和檔 可在我們的範例頁面上取得,您可以找到下列完整程式碼:

void setup()
{
    // put your setup code here, to run once:

    pinMode(GPIO5, OUTPUT);
}

void loop()
{
    // put your main code here, to run repeatedly:

    digitalWrite(GPIO5, LOW);
    delay(500);
    digitalWrite(GPIO5, HIGH);
    delay(500);
}