Простой бит кода для возврата информации о порте:
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 ()?