SerialPort.ReadLine 方法   
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
一直读取到输入缓冲区中的 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 = gcnew Thread(gcnew ThreadStart(PortChat::Read));
        // Create a new SerialPort object with default settings.
        _serialPort = gcnew 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();
    }
    static void Read()
    {
        while (_continue)
        {
            try
            {
                String^ message = _serialPort->ReadLine();
                Console::WriteLine(message);
            }
            catch (TimeoutException ^) { }
        }
    }
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 。
如果需要在读取文本和从流中读取二进制数据之间进行切换,请选择一个协议来仔细定义文本与二进制数据之间的边界,例如手动读取字节和解码数据。
注意
SerialPort由于 类缓冲数据,而 属性中包含的BaseStream流不缓冲,因此两者可能会在有多少字节可供读取方面发生冲突。 属性 BytesToRead 可以指示存在要读取的字节,但属性中包含的 BaseStream 流可能无法访问这些字节,因为它们已缓冲到 SerialPort 类。