#c_sharp #net
Как проверить подключён COM-порт или нет? Например, пользователь выбрал COM 3, но во время работы этот порт был отключён. Как грамотно выполнить проверку присутствует ли COM-порт и возможно ли его открыть? На данный момент делаю вот так(пример): SerialPort port = new SerialPort("COM 8"); string[] allport = SerialPort.GetPortNames(); bool stat = false; for (int i = 0; i < allport.Length; i++) { if (allport[i] == port.PortName) { stat = true; break; } } if (stat) port.Open(); else Console.WriteLine("{0} отключен.", port.PortName); Но уверен, что данною операцию можно реализовать грамотней.
Ответы
Ответ 1
Насколько я понимаю, порт может быть отключён в любой момент. Поэтому я бы делал так: работал с портом как обычно, а при приходе IOException говорил бы пользователю о проблемах при коммуникации с портом. Проверять можно через using System.IO.Ports; var port = new SerialPort("COM99"); port.Open(); // бросает исключение, если порта нет или SerialPort.GetPortNames().Contains("COM99") (как делаете это вы). Но отлова исключений всё равно не избежать, т. к. порт может появиться или исчезнуть сразу после проверки.Ответ 2
Ваш код можно немного изменить используя метод Any(...). Можно создать вот такой метод, который принимает имя порта, проверяет, содержится ли это имя в списке имен последовательных портов текущего компьютера, а затем уже попытаемся открыть порт: static void OpenPort(string portName) { if (SerialPort.GetPortNames().Any(x => x == portName)) { // если такой порт есть, то попробуем открыть его и сделать что-то еще... var port = new SerialPort(portName); try { port.Open(); // здесь может быть код еще... } catch (Exception ex) { // что-то пошло не так и упало исключение... Выведем сообщение исключения Console.WriteLine(string.Format("Port:'{0}' Error:'{1}'", portName, ex.Message)); } } } А затем просто вызывать этот метод, передавая туда имя интересующего вас порта. Метод SerialPort.GetPortNames() - возвращает массив имен последовательных портов для текущего компьютера.
Комментариев нет:
Отправить комментарий