1

com0com COM13 和 COM14

var selector = SerialDevice.GetDeviceSelector("COM14");
var informations = await DeviceInformation.FindAllAsync(selector);

if (informations.Any())
{
    var port = await SerialDevice.FromIdAsync(informations.First().Id);
}

informations.Any() 为假

我的错误在哪里?

4

2 回答 2

1

我还没有在 UWP 上尝试过,但是在访问 10 或更大的 COM 端口时有一个Windows 怪癖:您需要从用户模式指定完整的符号设备名称。即,预先添加一个\\.\

var selector = SerialDevice.GetDeviceSelector(@"\\.\COM14");
于 2017-01-23T14:14:30.310 回答
1

Microsoft SerialCommunication 文档站点描述了当前不支持系统内部端口: Microsoft Docs about windows.devices.serialcommunication

我不明白为什么不这样做,他们将来可能会添加此功能。

一种解决方法是:

C# 使用标准的 .NET System.IO.Ports.SerialPort 类(GetPortNames() 除外),一切都适用于 UWP 6.1.5 的 .NET。作为 GetPortNames 的替代品,您可以 P/Interop 到 GetCommPorts。

C++/winrt 使用新的 Windows 10 RS3/4 API 调用 OpenCommPort。请参阅函数原型的 Windows 头文件,因为此函数当前未在 MS 文档中记录。

请注意,还要确保在您的 .appxmanifest 文件中,您的应用程序“声明”了对串行端口的访问权限:

<DeviceCapability Name="serialcommunication">
  <Device Id="any">
    <Function Type="name:serialPort" />
  </Device>
</DeviceCapability>
于 2018-06-26T10:05:25.283 回答