UWP SerialCommunication: ожидание SerialDevice.FromIdAsync не возвращает SerialDevice - PullRequest
2 голосов
/ 19 марта 2019

Простой бит кода для возврата информации о порте:

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);
   }
}

По какой-либо причине «await SerialDevice.FromIdAsync (item.Id)» никогда не возвращает SerialDevice. Я пробовал этот код (тот же проект VS / решение) на другом компьютере, и он отлично работает. Обе машины идентичны по конфигурации (Win10 v. 1809). Я также проверил ссылки на манифест пакета. Последовательная связь.

Вот еще несколько вещей, которые я попробовал: Я создал библиотеку Net Standard 2.0 с Microsoft.Windows.Compatibility и включил ее в свое приложение UWP. UWP не позволил бы мне использовать метод SerialPort.GetPortNames ().

Я скачал RJCP nuget и смог без проблем использовать его GetPortNames () и GetPortDescription ().

В конце концов, я могу использовать RJCP для последовательной связи, но я хочу понять, почему Windows.Devices.SerialCommunication не работает для меня.

Есть идеи?

** Обновление и, возможно, потенциальная подсказка **

После разбора нескольких вопросов SO, касающихся ввода-вывода, я поместил оператор использования в foreach:

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

Мне кажется, это работает последовательно, но я не понимаю, почему. Если мое приложение выполняется с полной остановки или я перезапустил свой компьютер, у меня не должно быть открытых портов, нуждающихся в Dispose ()?

...