SerialPort.Open Метод

Определение

Открывает новое подключение последовательного порта.

public:
 void Open();
public void Open();
member this.Open : unit -> unit
Public Sub Open ()

Исключения

Доступ запрещен к порту.

–или–

Текущий процесс или другой процесс в системе уже имеет указанный COM-порт, открытый экземпляром SerialPort или в неуправляемом коде.

Одно или несколько свойств для этого экземпляра недопустимы. Например, ParityDataBitsсвойства или Handshake свойства не являются допустимыми значениями; BaudRate значение меньше нуля или равно нулю, ReadTimeoutWriteTimeout а свойство меньше нуля и не InfiniteTimeoutравно нулю.

Имя порта не начинается с com.

–или–

Тип файла порта не поддерживается.

Порт находится в недопустимом состоянии.

–или–

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

Указанный порт в текущем экземпляре SerialPort уже открыт.

Примеры

В следующем примере кода показано использование класса, позволяющего SerialPort двум пользователям общаться с двух отдельных компьютеров, подключенных с помощью кабеля модема NULL. В этом примере пользователям предлагается задать параметры порта и имя пользователя перед чатом. Этот пример кода является частью более крупного примера кода, предоставленного SerialPort для класса.

public static void Main()
{
    string name;
    string message;
    StringComparer stringComparer = StringComparer.OrdinalIgnoreCase;
    Thread readThread = new Thread(Read);

    // Create a new SerialPort object with default settings.
    _serialPort = new SerialPort();

    // Allow the user to set the appropriate properties.
    _serialPort.PortName = SetPortName(_serialPort.PortName);
    _serialPort.BaudRate = SetPortBaudRate(_serialPort.BaudRate);
    _serialPort.Parity = SetPortParity(_serialPort.Parity);
    _serialPort.DataBits = SetPortDataBits(_serialPort.DataBits);
    _serialPort.StopBits = SetPortStopBits(_serialPort.StopBits);
    _serialPort.Handshake = SetPortHandshake(_serialPort.Handshake);

    // Set the read/write timeouts
    _serialPort.ReadTimeout = 500;
    _serialPort.WriteTimeout = 500;

    _serialPort.Open();
    _continue = true;
    readThread.Start();

    Console.Write("Name: ");
    name = Console.ReadLine();

    Console.WriteLine("Type QUIT to exit");

    while (_continue)
    {
        message = Console.ReadLine();

        if (stringComparer.Equals("quit", message))
        {
            _continue = false;
        }
        else
        {
            _serialPort.WriteLine(
                String.Format("<{0}>: {1}", name, message));
        }
    }

    readThread.Join();
    _serialPort.Close();
}

public static void Read()
{
    while (_continue)
    {
        try
        {
            string message = _serialPort.ReadLine();
            Console.WriteLine(message);
        }
        catch (TimeoutException) { }
    }
}
Public Shared Sub Main()
    Dim name As String
    Dim message As String
    Dim stringComparer__1 As StringComparer = StringComparer.OrdinalIgnoreCase
    Dim readThread As New Thread(AddressOf Read)

    ' Create a new SerialPort object with default settings.
    _serialPort = New SerialPort()

    ' Allow the user to set the appropriate properties.
    _serialPort.PortName = SetPortName(_serialPort.PortName)
    _serialPort.BaudRate = SetPortBaudRate(_serialPort.BaudRate)
    _serialPort.Parity = SetPortParity(_serialPort.Parity)
    _serialPort.DataBits = SetPortDataBits(_serialPort.DataBits)
    _serialPort.StopBits = SetPortStopBits(_serialPort.StopBits)
    _serialPort.Handshake = SetPortHandshake(_serialPort.Handshake)

    ' Set the read/write timeouts
    _serialPort.ReadTimeout = 500
    _serialPort.WriteTimeout = 500

    _serialPort.Open()
    _continue = True
    readThread.Start()

    Console.Write("Name: ")
    name = Console.ReadLine()

    Console.WriteLine("Type QUIT to exit")

    While _continue
        message = Console.ReadLine()

        If stringComparer__1.Equals("quit", message) Then
            _continue = False
        Else
            _serialPort.WriteLine([String].Format("<{0}>: {1}", name, message))
        End If
    End While

    readThread.Join()
    _serialPort.Close()
End Sub

Public Shared Sub Read()
    While _continue
        Try
            Dim message As String = _serialPort.ReadLine()
            Console.WriteLine(message)
        Catch generatedExceptionName As TimeoutException
        End Try
    End While
End Sub

Комментарии

Для каждого SerialPort объекта может существовать только одно открытое подключение.

Рекомендуется дождаться некоторого времени после вызова Close метода, прежде чем пытаться вызвать Open метод, так как порт не может быть закрыт мгновенно.

Применяется к