UWP SerialCommunication:等待SerialDevice.FromIdAsync不返回SerialDevice

时间:2019-03-19 11:15:46

标签: c# uwp async-await serial-communication

返回端口信息的简单代码:

private async void GetPortNames()
{
   string deviceSelector = SerialDevice.GetDeviceSelector();

   DeviceInformationCollection deviceCollection = await 
      DeviceInformation.FindAllAsync(deviceSelector);

   List<string> portNamesList = new List<string>();
   foreach (var item in deviceCollection)
   {
     SerialDevice serialDevice = await SerialDevice.FromIdAsync(item.Id);
     string portName = serialDevice.PortName;
     portNamesList.Add(portName);
   }
}

无论出于何种原因,“等待SerialDevice.FromIdAsync(item.Id)”都不会返回SerialDevice。我已经在另一台机器上尝试过此代码(相同的VS项目/解决方案),并且工作正常。这两台计算机的配置相同(Win10 v。1809)。我还验证了软件包清单参考中的“串行通信”。

这里我还尝试了其他一些方法:我使用Microsoft.Windows.Compatibility创建了Net Standard 2.0库,并将其引用到我的UWP应用中。 UWP不允许我使用SerialPort.GetPortNames()方法。

我下载了RJCP nuget,并且可以毫无问题地使用它的GetPortNames()和GetPortDescriptions()。

最后,我可以使用RJCP进行串行通信,但是我想了解为什么Windows.Devices.SerialCommunication对我不起作用。

有什么想法吗?

**更新,也许还有潜在的提示**

筛选完有关I / O的多个SO问题之后,我在foreach中放置了一条using语句:

using (SerialDevice serialDevice = await SerialDevice.FromIdAsync(item.Id))
{
   string portName = serialDevice.PortName;
   AllPortNames.Add(portName);
}

这似乎一直对我有效,但是我不明白为什么。如果我的应用程序从停止状态开始执行,或者我已经重新启动PC,我应该打开任何需要Dispose()的端口吗?

0 个答案:

没有答案