#c# #uwp #async-await #serial-communication
#c# #uwp #async-ожидает #последовательная связь
Вопрос:
Простой фрагмент кода для возврата информации о порту:
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 (элемент.Идентификатор)» никогда не возвращает SerialDevice. Я использую Win10 v.1809, и я также проверил, что в манифесте пакета упоминается последовательная связь.
Вот некоторые другие вещи, которые я пробовал: я создал библиотеку Net Standard 2.0 с помощью Microsoft.Windows.Совместимость и сослался на нее в моем приложении UWP. UWP не позволил бы мне использовать SerialPort.GetPortNames() метод. Я также пытался реализовать RJCP.IO . Это тоже не сработало.
Есть идеи?
** Обновить **
Это может быть архитектурной проблемой с Panasonic Toughbook FZ-M1: как я упоминал ранее, «SerialDevice.FromIdAsync (элемент.Идентификатор)» не возвращает SerialDevice. На самом деле он возвращает null. Версия элемента от Panasonic.Идентификатор указывает на нужную вещь в реестре, но элемент.Вместо «COM###» возвращается Name = «DESKTOP-QR####» (то есть имя компьютера).
Комментарии:
1. Под «никогда не возвращает SerialDevice», я полагаю, вы имеете в виду, что оно зависает, когда вы это делаете
await SerialDevice.FromIdAsync(item.Id)
?2. Когда я прогнал свой фрагмент кода через отладчик, он выглядит как ожидающее SerialDevice. FromIdAsync выполняется, но приложение не зависает. Я все еще могу перемещаться по своему приложению и выполнять другие функции. Возможно, лучшее описание — await SerialDevice . FromIdAsync ожидает вечно? @IanKemp