C# проверяют, открыт ли порт COM (Serial) уже

Исключение нулевого указателя генерируется, когда приложение пытается использовать null в случае, когда требуется объект. К ним относятся:

  1. Вызов метода экземпляра объекта null.
  2. Доступ или изменение поля объекта null.
  3. Принимая длину null, как если бы это был массив.
  4. Доступ или изменение слотов null, как если бы это был массив.
  5. Бросок null как будто это было значение Throwable.

Приложения должны бросать экземпляры этого класса, чтобы указать на другие незаконные использования объекта null.

Ссылка: http://docs.oracle.com/javase/8/docs/api/java/lang/NullPointerException.html

19
задан Jon Seigel 20 March 2010 в 19:15
поделиться

3 ответа

Мне было нужно что-то подобное некоторое время назад, для поиска устройства.

я получил список доступных COM-портов и затем просто выполнил итерации по ним, если он не выдавал исключение, я пытался связаться с устройством. Немного грубо, но работа.

var portNames = SerialPort.GetPortNames();

foreach(var port in portNames) {
    //Try for every portName and break on the first working
}
14
ответ дан 30 November 2019 в 04:29
поделиться

класс SerialPort имеет , Открывают метод, который выдаст несколько исключений. Ссылка выше содержит подробные примеры.

См. также, свойство IsOpen.

А простой тест:

using System;
using System.IO.Ports;
using System.Collections.Generic;
using System.Text;

namespace SerPort1
{
class Program
{
    static private SerialPort MyPort;
    static void Main(string[] args)
    {
        MyPort = new SerialPort("COM1");
        OpenMyPort();
        Console.WriteLine("BaudRate {0}", MyPort.BaudRate);
        OpenMyPort();
        MyPort.Close();
        Console.ReadLine();
    }

    private static void OpenMyPort()
    {
        try
        {
            MyPort.Open();
        }
        catch (Exception ex)
        {
            Console.WriteLine("Error opening my port: {0}", ex.Message);
        }
    }
  }
}
1
ответ дан 30 November 2019 в 04:29
поделиться

Можно попытаться нумеровать код, чтобы проверить, открывается ли порт уже или нет. Я предполагаю, что Вы не знаете конкретно, какой порт Вы хотите проверить.

foreach (var portName in Serial.GetPortNames()
{
  SerialPort port = new SerialPort(portName);
  if (port.IsOpen){
    /** do something **/
  }
  else {
    /** do something **/
  }
}
-2
ответ дан 30 November 2019 в 04:29
поделиться
Другие вопросы по тегам:

Похожие вопросы: