SerialDevice 类

定义

表示串行端口。 对象提供方法和属性,应用可以使用这些方法和属性来查找系统上的串行端口并与之交互。

public ref class SerialDevice sealed : IClosable
/// [Windows.Foundation.Metadata.ContractVersion(Windows.Foundation.UniversalApiContract, 65536)]
/// [Windows.Foundation.Metadata.MarshalingBehavior(Windows.Foundation.Metadata.MarshalingType.Agile)]
class SerialDevice final : IClosable
[Windows.Foundation.Metadata.ContractVersion(typeof(Windows.Foundation.UniversalApiContract), 65536)]
[Windows.Foundation.Metadata.MarshalingBehavior(Windows.Foundation.Metadata.MarshalingType.Agile)]
public sealed class SerialDevice : System.IDisposable
Public NotInheritable Class SerialDevice
Implements IDisposable
继承
Object Platform::Object IInspectable SerialDevice
属性
实现

Windows 要求

设备系列
Windows 10 (在 10.0.10240.0 中引入)
API contract
Windows.Foundation.UniversalApiContract (在 v1.0 中引入)

示例

using System;
using Windows.Devices.Enumeration;
using Windows.Devices.SerialCommunication;
using Windows.Storage.Streams;

...

DeviceInformationCollection serialDeviceInfos = await DeviceInformation.FindAllAsync(SerialDevice.GetDeviceSelector());

foreach (DeviceInformation serialDeviceInfo in serialDeviceInfos)
{
    try
    {
        SerialDevice serialDevice = await SerialDevice.FromIdAsync(serialDeviceInfo.Id);

        if (serialDevice != null)
        {
            // Found a valid serial device.

            // Reading a byte from the serial device.
            DataReader dr = new DataReader(serialDevice.InputStream);
            int readByte = dr.ReadByte();

            // Writing a byte to the serial device.
            DataWriter dw = new DataWriter(serialDevice.OutputStream);
            dw.WriteByte(0x42);
        }
    }
    catch (Exception)
    {
        // Couldn't instantiate the device
    }
}

注解

需要串行设备功能 serialCommunication才能使用 SerialDevice 类。 有关详细信息,请参阅 Windows.Devices.SerialCommunication

创建 SerialDevice 对象

  1. (AQS) 字符串生成高级查询语法,该字符串包含用于在枚举的设备集合中查找设备的搜索条件。 如果你有供应商和产品标识符,请调用 GetDeviceSelectorFromUsbVidPid
  2. 将检索到的字符串传递给 FindAllAsync。 调用检索 DeviceInformationCollection 对象。
  3. 循环访问集合。 每次迭代都会获取 一个 DeviceInformation 对象。
  4. 获取 DeviceInformation.Id 属性值。 字符串值是设备接口路径。 (例如 \\?\usb#vid_03eb&pid_2157&mi_01#7&1435ec7f&0&0001#{86e0d1e0-8089-11d0-9ce4-08003e301f73}) 。
  5. 通过传递设备接口字符串调用 FromIdAsync 并获取 SerialDevice 对象。 如果这会引发异常或返回 null,则可能是:
    • 设备接口路径无效
    • 设备接口路径不重新表示串行设备
    • 应用程序缺少 serialCommunication 功能
    • 无法访问串行设备。 (请参阅 Windows.Devices.SerialCommunication)

读取和写入数据

然后,可以使用 SerialDevice 对象通过 Windows.Storage.Streams 命名空间从串行端口读取或写入串行端口。

  1. 通过获取 SerialDevice.InputStream 属性来获取对输入流的引用。
  2. 通过在 DataReader 构造函数中指定输入流来创建 DataReader 对象。
  3. 通过获取 SerialDevice.OutputStream 属性来获取对输出流的引用。
  4. 通过在 DataWriter 构造函数中指定输出流,创建 DataWriter 对象。

属性

BaudRate

获取或设置波特率。

BreakSignalState

获取或设置中断信号状态。

BytesReceived

表示输入流的上次读取操作接收的字节数。

CarrierDetectState

获取运营商检测 (CD) 行的状态。

ClearToSendState

获取 Clear-to-Send (CTS) 行的状态。

DataBits

传输或接收的每个字符值中的数据位数,不包括奇偶校验位或停止位。

DataSetReadyState

获取数据设置就绪 (DSR) 信号的状态。

Handshake

获取或设置流控制的握手协议。

InputStream

包含串行端口上接收的数据的输入流。

IsDataTerminalReadyEnabled

获取或设置一个值,该值启用数据终端就绪 (DTR) 信号。

IsRequestToSendEnabled

获取或设置一个值,该值使请求发送 (RTS) 信号。

OutputStream

获取一个输出流,应用可以写入要通过串行端口传输的数据。

Parity

获取或设置用于错误检查的奇偶校验位。

PortName

获取串行通信的端口名称。

ReadTimeout

获取或设置读取操作的超时值。

StopBits

获取或设置每个字节的标准停止位数。

UsbProductId

获取 USB 设备描述符idProduct 字段。 此值指示特定于设备的产品标识符,由制造商分配。

UsbVendorId

获取 USB 设备描述符idVendor 字段。 该值指示 USB 规范委员会分配的设备供应商标识符。

WriteTimeout

获取或设置写入操作的超时值。

方法

Close()

释放对之前通过调用 FromIdAsync 获取的 SerialDevice 对象的引用。

Dispose()

执行与释放或重置非托管资源关联的应用程序定义的任务。

FromIdAsync(String)

启动创建 SerialDevice 对象的异步操作。

GetDeviceSelector()

获取高级查询语法 (AQS) 字符串,应用可以传递给 DeviceInformation.FindAllAsync 以查找系统上的所有串行设备。

GetDeviceSelector(String)

获取高级查询语法 (AQS) 字符串,应用可以传递给 DeviceInformation.FindAllAsync ,以便通过指定串行设备端口名称来查找该设备。

GetDeviceSelectorFromUsbVidPid(UInt16, UInt16)

获取高级查询语法 (AQS) 字符串,应用可以传递给 DeviceInformation.FindAllAsync ,以便通过指定其 VID 和 PID 来查找特定的串行转 USB 设备。

事件

ErrorReceived

在串行端口上发生错误时调用的事件处理程序。

PinChanged

当信号或线路的状态在串行端口上更改时调用的事件处理程序。

适用于

另请参阅