SerialPort.ReadLine Metod

Definition

Läser upp till värdet NewLine i indatabufferten.

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

Returer

Innehållet i indatabufferten fram till den första förekomsten av ett NewLine värde.

Undantag

Den angivna porten är inte öppen.

Åtgärden slutfördes inte innan tidsgränsen upphörde.

-eller-

Inga byte lästes.

Exempel

Följande kodexempel visar hur klassen används SerialPort för att tillåta två användare att chatta från två separata datorer som är anslutna med en null-modemkabel. Det här kodexemplet är en del av ett större kodexempel som tillhandahålls SerialPort för klassen.

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

Kommentarer

Observera att även om den här metoden inte returnerar NewLine värdet tas NewLine värdet bort från indatabufferten.

Som standard blockeras ReadLine metoden tills en rad tas emot. Om det här beteendet inte är önskvärt anger du ReadTimeout egenskapen till ett värde som inte är noll för att tvinga ReadLine metoden att utlösa en TimeoutException om en rad inte är tillgänglig på porten.

Om det är nödvändigt att växla mellan att läsa text och läsa binära data från strömmen väljer du ett protokoll som noggrant definierar gränsen mellan text och binära data, till exempel att manuellt läsa byte och avkoda data.

Note

SerialPort Eftersom klassen buffrar data och strömmen i BaseStream egenskapen inte gör det, kan de två vara i konflikt med hur många byte som är tillgängliga att läsa. Egenskapen BytesToRead kan indikera att det finns byte att läsa, men dessa byte kanske inte är tillgängliga för strömmen i BaseStream egenskapen eftersom de har buffrats till SerialPort klassen.

Gäller för