#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() - возвращает массив имен последовательных портов для текущего компьютера.
Комментариев нет:
Отправить комментарий