SerialPort.ReadLine Метод

Определение

Считывает значение NewLine в входном буфере.

public:
 System::String ^ ReadLine();
public string ReadLine();
member this.ReadLine : unit -> string
Public Function ReadLine () As String

Возвращаемое значение

Содержимое входного буфера до первого вхождения NewLine значения.

Исключения

Указанный порт не открыт.

Операция не завершилась до окончания периода ожидания.

–или–

Байты не считывались.

Примеры

В следующем примере кода показано использование класса, позволяющего 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

Комментарии

Обратите внимание, что хотя этот метод не возвращает NewLine значение, NewLine значение удаляется из входного буфера.

По умолчанию ReadLine метод блокируется до получения строки. Если это поведение нежелательно, задайте ReadTimeout свойству любое ненулевое значение, чтобы ReadLine принудительно вызвать TimeoutException метод, если строка недоступна в порту.

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

Note

SerialPort Так как данные буферов класса, а поток, содержащийся в BaseStream свойстве, нет, они могут конфликтовать с количеством байтов, доступных для чтения. Свойство BytesToRead может указывать на наличие байтов для чтения, но эти байты могут быть недоступны для потока, содержащегося в BaseStream свойстве, так как они были буферированы в SerialPort класс.

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