UML软件工程组织

使用.NET Compact Framework 编程
选自:www.microsoft.com

Wei-Meng Lee

Microsoft .NET Compact Framework 是 .NET Framework 的一部分,是为了在移动设备(如移动电话、个人数字助理 (PDA))和嵌入式设备)上运行而设计的。它包含 .NET Framework 中的类库的子集,同时还包含为了在其上运行而设计的专有类。利用熟悉 .NET Framework 的优势,开发人员现在能够使用 Visual Studio .NET 开发工具快速地创建移动应用程序。在本文中,Wei-Meng Lee 向您介绍了如何使用 .NET Compact Framework 和 Visual Studio .NET 2003 来创建移动应用程序。

*

组成移动应用程序的不同服务层显示在图 1 中。底层是操作系统驻留的硬件。它可以运行在 Intel Xscale 处理器或者更老的 StrongArm 处理器之上。运行在硬件之上的是操作系统,例如 Windows CE 2.x、3.0,或者最新的 Windows CE .NET。

图1

操作系统和硬件共同构成平台。平台的一些例子包括 Pocket PC 和 Pocket PC 2002。在 .NET Compact Framework 之前开发的应用程序直接访问操作系统提供的服务,因此它们被称作本机应用程序。Application Domain Host 本身是一个本机应用程序,它的主要工作是承载公共语言运行库 (Common Language Runtime,CLR)。CLR 之上是 .NET Compact Framework 类库。

系统要求

要使用 .NET Compact Framework 开发应用程序,您需要安装 Visual Studio .NET 2003。Visual Studio .NET 2003 提供两种模式来测试您的智能设备应用程序 (Smart Device Application) — 使用仿真程序或实际设备。

在 Visual Studio .NET 2003 中,.NET Compact Framework 应用程序称为智能设备应用程序。智能设备应用程序可以运行在 Pocket PC 和 Windows CE .NET 平台上。

使用仿真程序

开发和测试智能设备应用程序最简单的方法是使用仿真程序。Visual Studio .NET 2003 提供了两个仿真程序 — 一个用于仿真 Windows CE .NET 平台,一个用于仿真 Pocket PC 2002 平台。根据产品文档,每个仿真程序都需要占用开发机器上额外的 64MB RAM。以我的经验来看,您需要一个中等速度的 CPU 和大量内存。我建议 256MB RAM。当然,如果您有 512MB 或 1GB RAM,将非常有助于加速开发过程。

Visual Studio .NET 提供的仿真程序是 Pocket PC (或 Windows CE .NET)操作系统的实际实现,它编译成运行在 x86 平台上。这与模拟程序不同,模拟程序通常是模仿设备行为的 Windows 应用程序。

对于硬件仿真,仿真程序支持两个串行端口和一个并行端口。可以将这些端口映射到开发机器上。

使用实际设备

对于利用特殊硬件特性(例如蓝牙 (Bluetooth))的应用程序,Visual Studio .NET 2003 允许在实际设备上测试应用程序。为了在实际设备上进行测试,需要与设备建立连接(通过 USB 或串行电缆)。还需要 Microsoft ActiveSync 3.5,这样应用程序就可以复制到用于进行测试的设备上。

通过使用 Visual Studio .NET 2003 中的调试器,可以单步调试代码,即使把应用程序部署在设备上。这是非常有帮助的,因为它使得能够实时调试应用程序。

在实际设备上测试应用程序使得有可能发现用仿真程序测试时并不明显的性能问题。

受支持的语言和平台

Visual Studio .NET 2003 中的 .NET Compact Framework 第一个版本仅支持 Visual Basic .NET 和 C# 语言。虽然 .NET Framework 支持 30 多种语言,但是在 .NET Compact Framework 中仅限于这两种语言。不过,这真的不是一个大问题,因为大部分开发人员都熟悉 Visual Basic .NET 和/或 C#,并且这两种语言的相似点多于不同点。

对于 .NET Compact Framework 的初始版本,智能设备应用程序可以在下列平台上执行:

Pocket PC

Pocket PC 2002

Pocket PC 2002 Phone Edition

Windows CE .NET 4.1 以及更高版本

虽然 Pocket PC 和 Pocket PC 2002 基于 Windows CE 3.0 操作系统,但是 .NET Compact Framework 不能运行在带有基于 Windows CE 3.0 或更低版本的 OS(如 Handheld PC 2000)的设备上。

令人吃惊的是,.NET Compact Framework 的第一个版本并不支持被竭力推荐的 SmartPhone 2002 平台。但是根据 Microsoft 的说法,您有望在 .NET Compact Framework 的下一个版本中看到对这个平台的支持。

以 Pocket PC 为例

现在把所有的背景知识放在一旁,我将使用 Visual Studio .NET 2003 构建一个智能设备应用程序。

要创建一个智能设备应用程序,可以启动 Visual Studio .NET 2003,并且通过单击 File | New Project 创建一个新项目。

在“Templates”下的“Project Types and Smart Device Application”中选择期望的语言(我使用 Visual Basic .NET)(请参见图 2)。单击“OK”按纽。

系统会提示选择应用程序的目标平台 — Pocket PC 或 Windows CE。另外,还有 5 个可用的项目类型:

Windows Application — 用于开发具有 GUI 特性的应用程序。

Class Library — 用于开发在智能设备应用程序中使用的类库。

Non-graphical Application — 用于创建不需要用户界面的应用程序。通常是指运行在后台的应用程序。

Console Application — 这个选项仅仅适用于 Windows CE .NET 平台。它创建一个运行在 Windows CE .NET 控制台内的应用程序。

Empty Project — 用于创建不包含任何文件的新项目。

对于我的例子,我将创建一个适用于 Pocket PC 平台的 Windows 应用程序(请参见图 3)。单击“OK”完成向导。

选择 Windows CE 作为平台将显示 Console Application 项目类型。Non-graphical Application 项目类型将不显示。

现在,您将看到熟悉的用于开发 .NET 应用程序的 IDE(请参见图 4)。

.NET CF 中的 Windows 控件

智能设备应用程序项目中的工具箱包含各种可以在智能设备应用程序中使用的控件。(请参见图 5)。

表 1列出了 .NET Compact Framework 中可用的控件。

表 1. .NET Compact Framework 中的控件

Label

TextBox

MainMenu

RadioButton

ComboBox

ListView

TabControl

HScrollBar

DomainUpDown

NumericUpDown

TrackBar

ProgressBar

Checkbox

Listbox

Input Panel

DataGrid

ContextMenu

ToolBar

OpenFileDialog

SaveFileDialog

PictureBox

Panel

VScrollBar

Timer

StatusBar

Button

TreeView

ImageList

设计窗体

首先,将下列控件拖放到窗体中(请参见图 6):

Label

TextBox

Button

双击“OK”按钮调用“Code”窗口。

我将在 Button1_Click 事件中加入一行,以在单击“OK”按钮时显示一个消息框。(请参见图 7)。

    MsgBox("Hello, " + TextBox1.Text, _
            MsgBoxStyle.Exclamation, "Hello Pocket PC")

如果您熟悉使用 .NET Framework 开发 Windows 应用程序,您应该对开发智能设备应用程序感到很亲切。

测试和调试应用程序

测试应用程序最简单且最快速的方法是使用仿真程序。仿真程序在 PC 上仿真实际设备的行为,而不需要购买实际设备来进行测试。Visual Studio .NET 2003 附带了两个仿真程序:用于 Pocket PC 应用程序的 Pocket PC 2002 和用于 Windows CE 应用程序的 Windows CE.NET。在“Device”工具栏上,可以选择使用仿真程序或实际设备来测试应用程序。(请参见图 8)。

使用仿真程序

Pocket PC 仿真程序提供了典型 Pocket PC 硬件配置的虚拟表示。运行在仿真程序上的应用程序通过仿真程序访问 CPU 和内存。正因如此,应用程序运行在仿真程序上通常比运行在实际设备上要慢一些。

取决于目标平台,在调试应用程序时可以通过按 F5 来激活两个不同的仿真程序。

Pocket PC 2002 仿真程序仿真运行 Pocket PC 2002 平台的实际设备。(请参见图 9)。

Windows CE .NET 仿真程序仿真运行 Windows CE .NET 操作系统的实际设备。(请参见图 10)。

在第一次调试应用程序时,Visual Studio .NET 会将所有相关的 .NET Compact Framework 程序集复制到仿真程序中(请参见图 11)。

它首先将当前项目中的可执行文件复制到设备上,然后将两个 CAB 文件复制并安装到仿真程序(或设备)上:netcf.core.ppc3.x86.cab 和 System_SR_enu.cab。可以检验这两个 CAB文件是否已成功安装(请参见图 12),方法是在设备上单击:Start | Settings | System | Remove Programs。

这两个程序集总共占用 1476KB 的内存。

手动激活仿真程序

当选择使用仿真程序在 Visual Studio .NET 2003 中运行智能设备应用程序时,仿真程序会自动启动。然而,有时想要在不使用 Visual Studio .NET 2003 的情况下启动仿真程序。如果这样,可以手动激活仿真程序,将它作为一个独立的应用程序运行。

仿真程序位于下面的目录中:C:\Program Files\Microsoft Visual Studio .NET 2003\CompactFrameworkSDK\ConnectionManager\Bin。

emulator.exe 应用程序支持这些选项:

/Video — 设置 Emulator for Windows CE 显示器的分辨率和位深度。格式必须为 <宽度>x<高度>x<位深度>,其中宽度、高度和位深度为整数。

/Ethernet — 在 Emulator for Windows CE 中启用或禁用以太网控制器。使用的值可以是 none、shared、virtualswitch 或是要使用的以太网适配器的 MAC 地址。

/Skin — 指示用于 Emulator for Windows CE 的外观文件。需要一个描述外观的 XML 文件名。

/CEImage — 指示要使用的 Windows CE 内核映像。

要启动 Emulator for Pocket PC 2002,可以定位到该仿真程序所在的子目录并发出下列命令:

start emulator /CEImage 
   images\PocketPC\2002\1033\PPC2002.bin 
   /Video 240x320x16

对于 Windows CE .NET Web Pad 仿真程序,可以使用下列命令:

start emulator /CEImage 
   images\windowsce\webpad\1033\wce4webpad.bin

注意,我使用了 start 命令来激活仿真程序。使用 start 命令运行仿真程序并立即将控制返回到命令提示符。

重置仿真程序

重置实际设备非常简单 — 大部分设备在设备底部都有一个重置按键。但是对于仿真程序,您有两个选择:

软重置 — 重新启动仿真程序。仿真程序会保留所有以前的设置。

硬重置 — 重新启动仿真程序并将仿真程序恢复到它的初始状态。所有安装的程序均会丢失。特别是在下一次从 Visual Studio .NET 2003 运行应用程序时需要重新安装 .NET Compact Framework 的程序集。

重置仿真程序是有一些原因的。我会在“一些常见的错误”部分中介绍一些常见的问题。

使用实际设备

虽然在开发阶段仿真程序总是有用的,但是只要有机会就在实际设备上测设应用程序至关重要。在实际设备上进行测试通常会发现性能问题(它在功能强大的桌面计算机上可能运行得很好,但是适合在速度较慢的移动设备上运行吗?)和可用性问题(在仿真程序中键入文本很容易,但这在实际设备上却真的是一种痛苦!)。

要使用实际设备进行测试,只需将“Device”工具栏中的设备选项更改为“Pocket PC Device”即可。还需要使用 ActiveSync 将 Pocket PC 连接到计算机。

如果设备上安装了较旧版本的 .NET Compact Framework,则需要将其从设备上删除。较旧版本的框架会导致当前项目的部署失败。可以通过定位到 Start | Settings | System | Remove Programs 卸载 .NET Compact Framework。

安装过程非常类似于仿真程序,但有一个值得注意的例外。由于我的 iPaq 3870 Pocket PC 正在使用一个 ARM 处理器,所以它不是复制 netcf.core.ppc3.x86.cab,而是复制 netcf.core.ppc3.arm.cab。

测试应用程序

现在让我们使用 Pocket PC 2002 仿真程序来测试这个应用程序。当加载默认的 Form1 时,在文本框中输入一个名称并单击“OK”按钮。应该看到一个显示消息的消息框,正如图 13 所示。

一些常见的错误

在学习本文中的例子的过程中,您可能在使您的智能设备应用程序项目正常工作时遇到过一些问题。下面是两个您可能遇到的常见错误以及解决它们的方法:

设备没有连接。 通常,当您尝试将您的应用程序部署到实际设备上时,您会看到这个错误消息。一个非常常见的原因是您的设备没有通过 ActiveSync 连接到开发机器上。虽然设备可能在物理上是连接的,但是 ActiveSync 并没有看到它。在这种情况下,可以断开设备连接并再次连接它。您可能需要重置设备或者保证连接到机器上的 USB(或者串行)端口工作正常。

文件共享冲突。这是另一个您可能遇到的常见错误,特别是如果您已经在仿真程序或者设备上成功地运行了您的应用程序。随后运行相同的应用程序可能会显示这个消息。当仿真程序(或设备)上的应用程序因为某种原因未能适当地退出,而您尝试在其上面再次运行该应用程序(Visual Studio .NET 需要重新复制 exe 文件)时,就会发生这样的情况。在这种情况下,重置设备很有可能解决此问题。对于仿真程序,首先试试软重置,看看问题是否会消失;如果失败,就使用硬重置。如果这一切都失败了,请重新启动 Visual Studio .NET 并再次运行应用程序。

 
 

版权所有:UML软件工程组织