开发前台应用程序
了解 Windows 10 IoT 核心版支持的不同语言,以及 IoT 核心版支持的 UWP 和非 UWP 应用类型。
注意
在部署到 RS5(或启用了 OpenSSH 的 RS4)IoT 映像时,Visual Studio 会生成一条晦涩的错误,除非安装了可供 Visual Studio 访问的来自 RS4 或更高版本的 SDK。
应用程序类型
通用 Windows 平台 (UWP) 应用
IoT 核心版是以 UWP 为中心的操作系统,UWP 应用是其主要的应用类型。
通用 Windows 平台 (UWP) 是面向 Windows 10 所有版本的通用应用平台,包括 Windows 10 IoT 核心版。 UWP 演变自 Windows 运行时 (WinRT)。 要了解更多信息及 UWP 的概览,请点击此处。
一般来说,Visual Studio 是用于为 IoT 核心版编写 UWP 应用的主要工具。 要了解 Visual Studio 的兼容性要求详情,请点击此处。
传统 UWP 应用
UWP 应用仅会在 IoT 核心版上运行,与其在其他 Windows 10 版本中别无二致。 在 Visual Studio 中,系统会将简单的空白 Xaml 应用恰如其分地部署到 IoT 核心版设备,与在手机或 Windows 10 PC 上的做法别无二致。 IoT 核心版完全支持所有标准 UWP 语言和项目模板。
为支持 IoT 方案,我们在传统 UWP 应用模型中添加了一些内容,任何利用这些方案的 UWP 应用都需要将相应信息添加到其清单中。 特别是,需要将“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 设备上,后台应用通常是设备的主要功能,因此这些 StartupTask 会获取在其他设备上镜像前台 UI 应用的资源策略。
以下示例演示了生成闪烁 LED 所需的由 C# 语言编写而成的后台应用代码:
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 桌面端别无二致。 此外,还提供了由 C++ 语言编写而成的 IoT 核心版控制台项目模板,有助于使用 Visual Studio 轻松构建此类应用。
对于这些非 UWP 应用,存在两个主要限制:
- 不提供旧版 Win32 UI 支持:IoT 核心版不包含用于创建经典 (HWND) Windows 的 API。 CreateWindow() 和 CreateWindowEx() 等传统方法或处理 Windows 句柄 (HWND) 的任何其他方法均不可用。 此外,IoT 核心版不支持依赖此类 API 的框架,包括 MFC、Windows Forms 和 WPF
- 仅限 C++ 应用:目前仅支持 C++ 在 IoT 核心版上开发 Win32 应用。
编程语言
IoT 核心版支持多种编程语言。
内置语言
默认情况下,Visual Studio 支持传统的 UWP 语言。 所有内置语言都支持 UI 和后台应用程序
- 语言
- C#
- C++
- JavaScript
- Visual Basic
Arduino 接线
Arduino 接线需要从 Visual Studio Tools-Extensions> 和 汇报 管理器下载“Windows IoT 核心版项目模板”。 Arduino 接线仅支持后台应用程序。 你还可以使用 C#、C++ 或 Visual Basic 构建 Windows 运行时组件,然后在使用任何其他语言时引用这些库。
C# 和 Visual Basic (VB)
作为 UWP 应用,C# 和 VB 均受到支持,并且可以访问 UWP 应用程序可用的 .NET Framework 部分。 它们支持通过 Xaml 和后台应用生成的 UI 应用。 你还可以构建可用于其他支持语言的 Windows 运行时组件。
示例:
Javascript
你可以使用 JavaScript 来构建 UI 和后台应用。 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++”复选框。
?### Arduino 接线
通过 Arduino 接线支持,你可以在 Arduino 接线中为 IoT 生态系统中的许多常用组件和外围设备构建应用。
我们的 Arduino 接线项目指南提供了有关如何建立这些应用的完整说明。 下方复制和链接的示例可助你开始自行构建。 你甚至可以在 Arduino 中构建可用于其他语言的 WinRT 组件。
Blinky 示例代码示例页上提供了完整的示例代码和文档,完整代码如下所示:
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);
}